如何将对象列表正确绑定到Grails命令?

如何将对象列表正确绑定到Grails命令?,第1张

概述我试图弄清楚如何将 JSON请求中的嵌套对象反序列化并验证到Grails 2.1.1命令对象中. 目前我的控制器中有一个命令对象,它有一些基本属性,然后是域对象列表, protected static class CustomCommand { String name String description List<DomainObject> objs} 和我的POST请 我试图弄清楚如何将 JSON请求中的嵌套对象反序列化并验证到Grails 2.1.1命令对象中.

目前我的控制器中有一个命令对象,它有一些基本属性,然后是域对象列表,

protected static class CustomCommand {    String name    String description    List<DomainObject> obJs}

和我的POST请求的JsON正文,

{    name: 'test name',description: 'test description',obJs: [        {            name: 'test sub object',description: 'test description'        }    ]}

我看到用空数组创建的命令对象.知道如何在JsON主体中获取子对象以反序列化到命令对象然后验证它们吗?

以前我通过从参数映射手动创建一个对象并直接验证它来解决这个问题,但这感觉就像一个没有利用Grails提供的所有功能的解决方法.

解决方法 我们将发布数据绑定到命令中的列表时遇到了类似的问题.我们的解决方法是为集合元素定义默认值:

class MyCommand {        List<MyClass> items= [].withLazyDefault {        new MyClass()    }}

之后,帖子数据被正确绑定到列表.我认为原因是Groovy忽略了列表的泛型类型参数,并且不知道在运行时实例化哪个对象.

我不确定这是否适用于您的情况,但它可能值得一试

更新:

几分钟前我用过这个:

public static class MyCommand {    String foo    List<bar> bars    public String toString() {        return "foo: " + foo + ",bars: " + bars    }}public static class bar {    String baz}

控制器方法:

def test() {     println new MyCommand(request.JsON)}

我使用jquery发布了一些Json:

$.AJAX({    type: "POST",url: '...',data: JsON.stringify({         'foo': '12345',bars: [            {baz: '1'},{baz: '2'}        ]    }),ContentType : 'application/Json',});

控制器打印的输出:

foo: 12345,bars: [[baz:1],[baz:2]]

所以似乎有效:o

总结

以上是内存溢出为你收集整理的如何将对象列表正确绑定到Grails命令?全部内容,希望文章能够帮你解决如何将对象列表正确绑定到Grails命令?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1234754.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存