鉴于这些域类:
class Person {
Long id
String name
static hasMany = [aliases: PersonAlias]
}
class PersonAlias {
Person person
Long id
String name
}
我尝试通过JSON土地进行直接往返加载/保存:
Person p = Person.get(20005353);
def json = p as JSON
def str = json as String
def map = JSON.parse(str)
p.properties = map
p.save(flush:true)
生成此JSON
{
"id": 20005353,
"name": "John Smith",
"class": "Person",
"aliases":
[
{
"class": "PersonAlias",
"id": 99,
"name": "J. Smith"
}
]
}
失败并出现此错误:
grails.validation.ValidationErrors:1个错误对象中的字段错误 字段'别名'上的'heavymeta.Person':拒绝值[[]];代码 [typeMismatch.heavymeta.Person.aliases,typeMismatch.aliases,typeMismatch.java.util.Set,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[heavymeta.Person.aliases,aliases];参数[];默认 消息[别名]];默认消息[无法转换属性值 类型为'org.codehaus.groovy.grails.web.json.JSONArray'为必填项 为属性'aliases'键入'java.util.Set';嵌套异常是 java.lang.IllegalStateException:无法转换类型的值 [java.util.LinkedHashMap]到必需的类型[heavymeta.PersonAlias] property'alias [0]':没有匹配的编辑器或转换策略 发现]
为什么会失败,有没有办法让它发挥作用?
答案 0 :(得分:1)
我可以给你一些建议(=。在params
动作中以调试模式检查update
(如果你没有为控制台generate-all Person
中的域类生成视图和控制器看看params.aliases
你会发现它是ids列表。尝试相同。