Grails JSONBuilderの最新バージョンを使用して同じオブジェクトを2回以上発光させたときにクロージャを繰り返さないようにする方法を知っている人はいますか?JSONBuilderを使用してカットアンドペーストのクロージャを削除する方法
Members
とLeaders
のセットを含むGroup
ドメインオブジェクトがあります。閉鎖を切り取って貼り付けることなく人を放出する方法を見つけたいと思います。
def builder = new JSONBuilder()
def result = builder.build {
array {
Group.list().each { Group group ->
g = {
id = group.id
name = group.name
members = array {
group.members?.person?.sort().each { Person person ->
m = { // Person closure copy #1
id = person.id
firstName = person.firstName
lastName = person.lastName
}
}
}
leaders = array {
group.leaders?.person?.sort().each { Person person ->
l = { // Person closure copy #2
id = person.id
firstName = person.firstName
lastName = person.lastName
}
}
}
}
}
}
}
私は別に閉鎖を定義しようとしたが、それは、次のようなエラーにつながる:exception: No such property: id for class:
。
いくつかの注意事項:
1)の例では、ドメイン・オブジェクトが大幅に簡略化されます。 render Group.list() as JSON
またはrender Group.list().encodeAsJSON
の代わりにJSONBuilderを使用しています。これは、オブジェクトのどの部分がエンコードされているかを制御する必要があるためです。
2)これができない理由を説明する正式な回答を受け入れることにします。
「クロージャを個別に定義するのはどうですか?」 私はデフクロージャ= {...}があなたのケースでうまくいくはずだと信じています... – jpertino
それは私が試みたものです。私はそれがうまくいくと思っていたが、そうはしなかった。 – lambmj