JSON.parse(someJSON)の結果をカスタムドメインクラスでもあるメンバーに自動的に変換するようにドメインクラスに教えたいと思います。
これらのドメインクラスが与えられた場合:
class Person {
Long id
String name
static hasMany = [aliases: PersonAlias]
}
class PersonAlias {
Person person
Long id
String name
}
そして、いくつかのPersonAliasesを持つPersonを表すこのJSON:
{
"id":20044397,
"name":"John Smith",
"aliases":[{"id":13376,"name":"Johnny Smith"},{"id":13377,"name":"J. Smith"}]
}
コントローラを次のようにシンプルに保ちたい:
class PersonController {
def saveViaAjax = {
def props = JSON.parse(params.JSON)
Person p = Person.get(props.id)
p.properties = props
p.save(flush: true)
}
}
しかし悲しいことに、私はこのエラーを受け取ります:
タイプ'org.codehaus.groovy.grails.web.json.JSONArray'のプロパティ値をプロパティ'aliases'に必要なタイプ'java.util.Set'に変換できませんでした。ネストされた例外はjava.lang.IllegalStateExceptionです:タイプ[org.codehaus.groovy.grails.web.json.JSONObject]の値をプロパティ'aliases [0]'に必要なタイプ[heavymeta.PersonAlias]に変換できません:一致するエディターがないか、変換戦略が見つかりました
そこで、JSONデータをPersonAliasインスタンスに自動的に変換する方法をドメインクラスに教えたいと思います。ドメインオブジェクトに渡す前に、コントローラーでデータをフォーマットしないようにしたいと思います。これらの目標を達成するにはどうすればよいですか?