。いくつかの注意点が:
- これは
- のGrails 2.4.5を使用している私は、バックエンドとしてのMongoDBを使用しています。このように、MongoDBドメインクラスのオブジェクトマーシャラーを作成しました。それは、以下に印刷され、そして、あなたのドメインクラスに対して同様のマーシャラーをラップすることができます(複数可):
マーシャラー:
class MongodbObjectMarshaller implements ObjectMarshaller<JSON> {
@Override
boolean supports(Object o) { return o?.properties?.dbo }
@Override
void marshalObject(Object obj, JSON converter) throws
ConverterException {
Map propertiesToOutput = obj.properties.dbo
propertiesToOutput.remove("_id") //don't print org.bson.types.ObjectId
propertiesToOutput.remove("version") //don't print gorm verson column
converter.build {
_id obj.id.toString()
propertiesToOutput.each{ entry ->
"$entry.key" entry.value
}
}
}
}
そのマーシャラーは、それはJSON出力にドメインクラスのいずれかを許可しない何プロパティ。 obj.properties.dbo
はMongoDBにとって特別ですが、通常のドメインクラスでは、プロパティを取得して不要なものを除外できます。
はその後、私のコントローラでは、これは動作します:
domainInstance.pin = [location:[lat:23.03, lon:72.58]]
def content = tacticalCard as JSON
私のマーシャラーが今ピンプロパティをピックアップし、それを印刷しているため。
このピンをドメインインスタンスの一部として追加しますか? – Sap
いいえ、そうではありません。しかし、本当にあなたのドメインを追加のフィールドにマージする必要がありますか?もしそうなら、あなたのドメインクラスにこのフィールドを追加するほうがいいでしょうか?あるいは、その中に代理フィールドを作り、 'pin'のゲッターを提供しますか? –
これは私の最初の試みでしたが、ドメインクラスでlatとlonを追加し、 'public getPin(){ \t \t [location:{lat:lat、lon:lon]] \t}メソッドを作成しましたが、 JSONのピンとしてのオブジェクトはJSONの文字列表現ではありません – Sap