4

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

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

}
4

3 回答 3

2

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

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

于 2012-06-13T07:38:52.343 回答
0

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

您必须使用验证器。

于 2012-06-13T12:55:52.227 回答
-1

我之前也遇到过类似的问题。

经过 2-3 天的研发后,我成功验证了嵌套对象。我尝试对嵌套对象进行自定义验证。

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

希望这对您有所帮助。干杯。

于 2012-06-13T02:45:03.863 回答