4

我有一个带有 mongodb 插件的 grails 应用程序。

我所有的域对象都是:

class Person {
  ObjectId id
  String name
}

class Like {
  ObjectId id
  Person from
  Person to
  Date createdAt
}

我的控制器应该根据一些Likeid 提供完整的数据:

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?我用 JSONBuiled 找到了这个解决方案,其中包含转义字段 'class'、metaClass' 和 'dbo'。但我认为它可以用 Expando 类来完成,但我找不到正确的方法......

无论如何,谢谢,马克西姆

4

4 回答 4

2

改变

render(like as grails.converters.JSON)

render(like as grails.converters.deep.JSON)
于 2012-06-27T15:10:08.360 回答
1

如果这对您来说仍然是个问题,您可能想尝试另一个 JSON 库,例如Jackson,它比 Grails JSON 库可以更好地控制将对象序列化为 JSON。

于 2012-08-03T07:13:34.610 回答
1

我相信标准方法是现在使用命名配置,所以你想要

JSON.use("deep") {
    render like as JSON
}
于 2012-06-28T03:04:20.327 回答
0

将子关联设置为非惰性。所以

   class Like {
  ObjectId id
  Person from
  Person to
  Date createdAt



 static mapping = {
        from lazy: false
    }

}
于 2012-08-03T05:14:09.207 回答