加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 16:29:56 所属栏目:大数据 来源:网络整理
导读:我试图弄清楚如何将 JSON请求中的嵌套对象反序列化并验证到Grails 2.1.1命令对象中. 目前我的控制器中有一个命令对象,它有一些基本属性,然后是域对象列表, protected static class CustomCommand { String name String description ListDomainObject objs}
我试图弄清楚如何将 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读