我有一个简单的类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中定义“索引属性名称”。
如果有人知道此问题的解决方法,我们将不胜感激! :)
答案 0 :(得分:0)
我认为您在实施过程中遗漏了一些内容。你会想要使用对象图的概念来实现这个目的。
你的类Foo在其中一个字段上有@NotNull验证,但是你还没有真正表达过要对集合有效的内容。
来自Hibernate Reference:
对象图验证也适用于集合类型字段。这意味着任何属性都是数组,实现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";
}
}