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 を構築する方法はありますか? エスケープされたフィールド 'class'、metaClass'、および 'dbo' を使用した JSONBuiled を使用して、このソリューションを見つけました。しかし、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.use("deep") {
    render like as JSON
}
于 2012-06-28T03:04:20.327 に答える
1

これが引き続き問題になる場合は、Jacksonなどの別の JSON ライブラリを試してみてください。Grails JSON ライブラリよりも、JSON へのオブジェクトのシリアル化をより詳細に制御できます。

于 2012-08-03T07:13:34.610 に答える
0

子の関連付けを遅延なしに設定します。それで

   class Like {
  ObjectId id
  Person from
  Person to
  Date createdAt



 static mapping = {
        from lazy: false
    }

}
于 2012-08-03T05:14:09.207 に答える