我有以下嵌套对象。我在我的控制器中使用@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
}
答案 0 :(得分:2)
据我所知,@NotNull
不太适合进行字符串验证,因为Spring模型经常将“没有收到对象”映射到“空字符串”。
请尝试@NotBlank
并查看BindingResults是否返回错误。
答案 1 :(得分:0)
你不能这样做。您不能像这样验证嵌套对象。
您必须使用验证器。
答案 2 :(得分:-1)
在某段时间之前我也遇到过类似的问题。
在做了2-3天后,R& D成功验证了嵌套对象。我试图对嵌套对象进行自定义验证。
你需要创建一个自定义验证器类并在控制器和方法调用validator.validate(parent,bindingResult)中自动装配它,它将返回绑定bindResult对象中嵌套对象字段的错误,然后你可以像往常一样在jsp页面上显示它。
希望这会对你有所帮助。欢呼声。