Groovy   发布时间:2022-04-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何将对象列表正确绑定到Grails命令?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图弄清楚如何将 JSON请求中的嵌套对象反序列化并验证到Grails 2.1.1命令对象中.

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

protected static class Customcatommand {
    String name
    String description
    List<DomainObject> objs
}@H_419_14@ 
 

和我的POST请求的JSON正文,

{
    name: 'test name',description: 'test description',objs: [
        {
            name: 'test sub object',description: 'test description'
        }
    ]
}@H_419_14@ 
 

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

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

解决方法

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

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

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

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

更新:

几分钟前我用过这个:

public static class MyCommand {
    String foo
    List<Bar> bars

    public String toString() {
        return "foo: " + foo + ",bars: " + bars
    }
}

public static class Bar {
    String baz
}@H_419_14@ 
 

控制器方法

def test() {
     println new MyCommand(request.JSON)
}@H_419_14@ 
 

我使用jquery发布了一些json:

$.ajax({
    type: "POST",url: '...',data: JSON.Stringify({ 
        'foo': '12345',bars: [
            {Baz: '1'},{Baz: '2'}
        ]
    }),contentType : 'application/json',});@H_419_14@ 
 

控制器打印的输出

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

所以似乎有效:o

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。