我使用Grails2.1将JSON呈现为我创建的RestFul应用程序接口的一部分。基于SqlServer表的域类如下所示:
String firstName
String lastName
String officialAddress1
String officalAddress2
String preferredAddress1
String preferredAddress2
等)。。。
它返回类似于下面的JSON:
{
"firstName":"Joe",
"lastName":“山”,
"officialAddress1":"1100 Wob Hill",
"officialAddress2":“3号公寓”,
"preferredAddress1":"1100摇摆车道。“,
"preferredAddress2":“3号公寓。”
}
它工作得很好,但客户希望我以这种方式嵌套结果:
{
"firstName":"Joe",
"lastName":“山”,
preferredAddress {
"preferredAddress1":"1100摇摆车道。“,
"preferredAddress1":“3号公寓。”
},
officialAddress {
"officialAddress1":"1100 Wob Hill",
"officialAddress2":“3号公寓”
}
}
我的问题是,既然域类和数据库的结构不能返回这种类型的嵌套结果,我如何才能在返回的JSON中轻松地更改它?我是否必须放弃仅仅基于数据库/域对象返回JSON的方式,而进行某种类型的自定义转换器?
发布于 2012-03-09 13:17:07
我刚接触堆栈溢出的事情,我希望我不会搞砸它,但我想我知道你需要什么。在您的bootstrap.groovy文件中,您会发现"def init ={ servletContext ->“行被放入其中,如下所示:
JSON.registerObjectMarshaller(YourDomainName) {
def returnArray = [:]
returnArray['firstName'] = it.firstName
returnArray['lastName'] = it.lastName
returnArray['preferredAddress'] = [it.preferredAddress1 ,it.preferredAddress2]
returnArray['officialAddress'] = [it.officialAddress1 ,it.officialAddress2]
return returnArray
}现在,当您像使用JSON一样使用render时,grails将在bootstrap中查找并按照您的要求渲染域。
希望这能有所帮助
发布于 2012-03-14 02:32:37
张贴的答案是正确的。我只想添加我所做的细微更改,以获得所需的确切结果:
谢谢!这就完成了。我最初认为它不会完全按照我需要的方式工作,但我错了。我稍微更改了语法以获得所需的结果。
returnArray['preferredAddress'] = [address1: it.preferredAddress1?.trim(),
address2: it.preferredAddress2?.trim(),
address3: it.preferredAddress3?.trim(),
city: it.preferredCity,
state: it.preferredState,
postCode: it.preferredPostCode,
country: it.preferredCountry
]https://stackoverflow.com/questions/9627841
复制相似问题