gpt4 book ai didi

json - Grails,从具有多关系的json字符串创建域对象

转载 作者:行者123 更新时间:2023-12-02 14:13:01 24 4
gpt4 key购买 nike

我正在尝试将 grails 参数映射解析为 Json 字符串,然后返回参数映射。 (用于保存违反约束的 html 表单条目)

只要参数映射中没有 hasMany 关系,一切都很好。

我正在使用

fc.parameter = params as JSON

将参数保存为 JSON 字符串。

后来我试图重建参数映射并用它创建一个新的域对象:
new Foo(JSON.parse(fc.parameter))

仅使用 1:1 关系(状态),一切都很好。
[states:2, listSize:50, name:TestFilter]

但是当我尝试使用多选值(状态)重建参数映射时
[states:[1,2], listSize:50, name:TestFilter]

我收到了这个 IllegalStateException:
Failed to convert property value of type org.codehaus.groovy.grails.web.json.JSONArray to required type java.util.Set for property states; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [de.gotosec.approve.State] for property states[0]: no matching editors or conversion strategy found

我尝试使用它,但没有成功:
JSON.use("deep") {
new Foo(JSON.parse(fc.parameter))
}

最佳答案

您可以使用 JsonSlurper 代替 grails 的 converters.JSON,它将 JSON 对象映射到 Groovy Maps。我认为 this链接也可能对您有所帮助。

编辑:现在,如果问题是将参数映射绑定(bind)到您的域,您应该尝试使用 bindData() 方法,例如:

bindData(foo, params)

请注意,仅当您在 Controller 内调用 bindData 时,才可以直接使用。

在您的情况下似乎正在发生的事情是 Grails 正在尝试将具体类型的 List (在 JsonSlurper 的情况下为 ArrayList 和在 converters.JSON 的情况下为 JSONArray )绑定(bind)到一组属性(这是默认数据结构一对多关联)。我将不得不查看您的代码以确认这一点。但是,正如您所做的替换状态:[1,2] 为您的应用程序的方法,尝试另一个测试来确认这个假设。改变:
states:[1,2]

为了
states:[1,2] as Set

如果这真的是问题,甚至 绑定(bind)数据() 作品,看看 this使用对象编码和 converters.JSON 以更难的方式使其工作。我不知道在你的项目中使用它是否实用,但它确实很好用;)

关于json - Grails,从具有多关系的json字符串创建域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11399003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com