繁体   English   中英

Spring 3,JSR-303(bean验证)和验证集合

[英]Spring 3, JSR-303 (bean validation) and validating collection

我有一个简单的类Foo,就像这样说:

public class Foo {
    @NotNull
    private String bar;
    public String getBar(){ return bar; }
    public void setBar(String _bar){ this.bar = _bar; }
}

现在,我有一个控制器REST方法,它采用Foos的数组(或集合),我想确保每个Foo都有一个非null的bar属性。 我认为使用@Valid注释会成功,但似乎不是:

@Controller
public class MyController {
    @RequestMapping(value="/foos", method=RequestMethod.POST)
    public @ResponseBody String createFoos(@Valid @RequestBody Foo[] foos){
        // blah blah blah
        return "yeah";
    }
}

注意:它也不适用于List <Foo>。 但是有一个独特的Foo它可以工作!

当我们有“多个”对象(在集合或数组中)时,看起来Spring验证不起作用。

我甚至尝试使用自定义注释实现HandlerMethodArgumentResolver,但我不知道如何在BindingResult中定义“索引属性名称”。

如果有人知道这个问题的解决方法,将不胜感激! :)

我认为您在实施过程中遗漏了一些内容。 您将希望使用对象图的概念来实现此功能。

你的类Foo在其中一个字段上有@NotNull验证,但是你还没有真正表达过要对集合有效的内容。

来自Hibernate参考:

对象图验证也适用于集合类型字段。 这意味着任何数组属性,实现java.lang.Iterable(尤其是Collection,List和Set)或实现java.util.Map都可以用@Valid注释,这将导致每个包含的元素在父对象时被验证已经过验证。

所以你的代码就会变成

@Controller
public class MyController {
    @RequestMapping(value="/foos", method=RequestMethod.POST)
    public @ResponseBody String createFoos(@Valid @NotNull @RequestBody Foo[] foos){
        // blah blah blah
        return "yeah";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM