对于以下域模型:
class Route {
String name
static hasMany = [checkPoints:CheckPoint]
static belongsTo = [someBigObject:SomeBigObject]
static mapping = {
checkPoints lazy: false
}
}
我需要从Web服务返回特定的Route
作为JSON。我希望这个JSON包含所有checkPoints
但不包含其他组合(即:someBigObject
)。
如果我这样做
def route = Route.findById(id)
render route as JSON
我得到的只是checkPoints
的id,没有其他字段被提取:
{
"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
}
}
但如果我这样做
JSON.use('deep') {
render route as JSON
}
我得到了一切。我的意思是,几乎所有的数据库都是通过各种关系获取的。
有没有办法在不手动创建jsonMaps的情况下执行此操作?
答案 0 :(得分:14)
您可以为所选类注册自己的JSON编组器,并返回要渲染的属性。可以通过对类字段的迭代自动完成映射。 Marshaller可以在创建过程中在bootstrap或域类中注册。
JSON.registerObjectMarshaller(Route) {
return [name:it.name, checkPoints:it.checkPoints]
}
希望有所帮助