2

给定这些域类:

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”的属性值转换为属性“别名”所需的类型“java.util.Set”;嵌套异常是 java.lang.IllegalStateException:无法将类型 [java.util.LinkedHashMap] 的值转换为属性“别名 [0]”所需的类型 [heavymeta.PersonAlias]:找不到匹配的编辑器或转换策略]

为什么这会失败,有没有办法让它工作?

4

1 回答 1

1

我可以给你一个小建议(=。检查params调试模式update(如果你还没有为在控制台中运行的域类生成视图和控制器generate-all Person)。看看params.aliases你会发现它是 ids 列表。试试相同的。

于 2012-08-08T19:51:28.650 回答