Bah*_*ğan 8 grails json grails-orm
对于以下域模型:
class Route {
String name
static hasMany = [checkPoints:CheckPoint]
static belongsTo = [someBigObject:SomeBigObject]
static mapping = {
checkPoints lazy: false
}
}
Run Code Online (Sandbox Code Playgroud)
我需要Route从Web服务返回一个特定的JSON.我希望这个JSON包含所有checkPoints但没有其他组合(即:) someBigObject.
如果我做
def route = Route.findById(id)
render route as JSON
Run Code Online (Sandbox Code Playgroud)
我得到的只是id的checkPoints,没有其他字段被提取:
{
"class": "com.example.Route",
"id": 1,
"checkPoints": [
{
"class": "CheckPoint",
"id": 1
},
{
"class": "CheckPoint",
"id": 2
},
{
"class": "CheckPoint",
"id": 4
},
{
"class": "CheckPoint",
"id": 3
}
],
"someBigObject": {
"class": "SomeBigObject",
"id": 2
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我这样做
JSON.use('deep') {
render route as JSON
}
Run Code Online (Sandbox Code Playgroud)
我得到了一切.我的意思是,几乎所有的数据库都是通过各种关系获取的.
有没有办法在不手动创建jsonMaps的情况下执行此操作?
dro*_*ggo 14
您可以为所选类注册自己的JSON编组器并返回要渲染的属性.可以通过对类字段的迭代自动完成映射.Marshaller可以在创建期间在bootstrap或域类中注册.
JSON.registerObjectMarshaller(Route) {
return [name:it.name, checkPoints:it.checkPoints]
}
Run Code Online (Sandbox Code Playgroud)
关于它的文章很好:http://manbuildswebsite.com/2010/02/15/rendering-json-in-grails-part-3-customise-your-json-with-object-marshallers/
希望能帮助到你