我有两个域类,一个是父类,另一个是子类,它们之间有一个 hasMany 关系。父类有很多子类,子类属于父类。 这是编码示例。
class Parent{
String name
static hasMany = [childs:Child]
static constraints = {
}
}
class Child{
String name
static belongsTo = [parent:Parent]
static constraints={}
}
问题是,一旦我获得父对象,与父类关联的子对象也被获取。但是当我将对象转换为 JSON 时,我并没有完全看到子对象,我只能看到子对象的 ID。我想查看子对象的所有列,而不仅仅是 Id。
转换后的 JSON 响应:
[{"class":"project.Parent","id":1,
"name":"name1","childs":[{"class":"Child","id":1},{"class":"Review","id":2}]}]
但我也想要包含子对象名称的响应,如下
[{"class":"project.Parent","id":1,"name":"name1",
"childs":[{"class":"Child","id":1,"name":"childname1"},
{"class":"Review","id":2,"name":"childname2"}
]
}]
非常感谢任何帮助。 提前致谢。
最佳答案
问题在于使用默认 JSON 转换器。以下是您的选择:
1. Default - all fields, shallow associations
a. render blah as JSON
2. Global deep converter - change all JSON converters to use deep association traversal
a. grails.converters.json.default.deep = true
3. Named config marshaller using provided or custom converters
a. JSON.createNamedConfig('deep'){
it.registerObjectMarshaller( new DeepDomainClassMarshaller(...) )
}
b. JSON.use('deep'){
render blah as JSON
}
4. Custom Class specific closure marshaller
a. JSON.registerObjectMarshaller(MyClass){ return map of properties}
b. render myClassInstance as JSON
5. Custom controller based closure to generate a map of properties
a. convert(object){
return map of properties
}
b. render convert(blah) as JSON
您当前使用的是默认选项 1。
您可以做的最简单的方法是使用选项 2 设置全局深度转换器,但请注意这会影响您应用中的所有域类。这意味着,如果您有一个大型关联树最终形成一个顶级对象,并且您尝试转换这些顶级对象的列表,那么深度转换器将执行所有查询以获取所有关联对象及其关联对象转动。 - 您可以一次性加载整个数据库 :) 小心。
关于json - Grails 获取子域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19144246/