我有一个带有mongodb插件的grails应用程序。
我的所有域名对象都是:
class Person {
ObjectId id
String name
}
和
class Like {
ObjectId id
Person from
Person to
Date createdAt
}
我的控制器应根据某些Like
ID:
class MyController {
def like() {
def like = Like.findById(new ObjectId("someIdHere"));
render(like as grails.converters.JSON)
}
}
我希望收到类似的完整JSON对象:
{
"class":"Like",
"id":{
"class":"org.bson.types.ObjectId",
"inc":1483542456,
"machine":805594765,
"new":false,
"time":1340363115000,
"timeSecond":1340363115
},
"createdAt":"2012-06-22T11:05:15Z",
"from":{
"class":"Person",
"id":{ ... },
"name":"Some name here"
},
"to":{
"class":"Person",
"id":{ ... },
"name":"Some name here"
}
}
但我收到了对象的第一级属性:
{
"class":"Like",
"id":{
"class":"org.bson.types.ObjectId",
"inc":1483542456,
"machine":805594765,
"new":false,
"time":1340363115000,
"timeSecond":1340363115
},
"createdAt":"2012-06-22T11:05:15Z",
"from":{
"class":"Person",
"id":"4fd31d453004dc0f010aca51"
},
"to":{
"class":"Person",
"id":"4fd31d463004dc0f010aca89"
}
}
我的问题是:有没有办法构建完整的(带引用的对象)mongo db(DBObject)数据对象的JSON?我发现这个solution with JSONBuiled有转义字段'class',metaClass'和'dbo'。但我认为可以使用Expando类来完成,但我找不到正确的方法......
谢谢你, 马克西姆
答案 0 :(得分:2)
更改
render(like as grails.converters.JSON)
到
render(like as grails.converters.deep.JSON)
答案 1 :(得分:1)
如果这对你来说仍然是一个问题,你可能想尝试另一个JSON库,比如Jackson,它可以更好地控制对JSON的序列化对象,而不是Grails JSON库。
答案 2 :(得分:0)
我认为标准方法是现在使用命名配置,以便
JSON.use("deep") {
render like as JSON
}
答案 3 :(得分:0)
将子关联设置为非惰性。 所以
class Like {
ObjectId id
Person from
Person to
Date createdAt
static mapping = {
from lazy: false
}
}