Spring MVC 3嵌套对象验证失败了@Valid

时间:2012-06-13 00:03:54

标签: spring spring-mvc bean-validation

我有以下嵌套对象。我在我的控制器中使用@Valid进行验证。这里BindingResult对象没有验证Child对象的名称字段。我错过了什么吗?

class Parent{
         @Valid  
         private Child child;
         //getter and setter for child object
 }

 class Child{
     @NotNull(messag="Name cannot be null")
     private String name;
     //getter and setter for name
 }

My controller validate method

@RequestMapping(value = "/validate", method = RequestMethod.POST)
public @ResponseBody  String validate(@Valid @ModelAttribute("parent") Parent parent, BindingResult bindingResult) {
    //Here I can see child name value if I say parent.getChild().getName()

  // But if  parent.getChild().getName() is null, bindingResult.hasErrors() is returning false

}

3 个答案:

答案 0 :(得分:2)

据我所知,@NotNull不太适合进行字符串验证,因为Spring模型经常将“没有收到对象”映射到“空字符串”。

请尝试@NotBlank并查看BindingResults是否返回错误。

答案 1 :(得分:0)

你不能这样做。您不能像这样验证嵌套对象。

您必须使用验证器。

答案 2 :(得分:-1)

在某段时间之前我也遇到过类似的问题。

在做了2-3天后,R& D成功验证了嵌套对象。我试图对嵌套对象进行自定义验证。

你需要创建一个自定义验证器类并在控制器和方法调用validator.validate(parent,bindingResult)中自动装配它,它将返回绑定bindResult对象中嵌套对象字段的错误,然后你可以像往常一样在jsp页面上显示它。

希望这会对你有所帮助。欢呼声。