【发布时间】:2013-02-16 10:39:10
【问题描述】:
我用一些 JSR-303 验证器注释制作了一个模型对象:
public class UserInfoBasicModel implements Serializable{
@NotNull(message="cannot be null")
@NotEmpty(message="cannot be empty")
private String name;
//getter and setter
//..ignored..
}
在控制器中自动绑定数据:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.POST, value = "/registry/")
public String registry(HttpServletRequest request,
ModelMap modelMap,
@Valid UserInfoBasicModel userInfoBasicModel,
BindingResult result) {
//...some code here...
}
}
在上述场景中,它适用于验证。但是当我将模型封装到另一个对象中时,如下所示,UserInfoBasicModel 上的验证不再起作用:
封装了 UserInfoBasicModel 对象的 Object:
public static class UserUpdateFormTransmitter {
@Valid
private UserInfoBasicModel userInfoBasicModel;
//getter and setter
//..ignored..
}
控制器:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.POST, value = "/registry/")
public String registry(HttpServletRequest request,
ModelMap modelMap,
@Valid UserUpdateFormTransmitter userUpdateFormTransmitter,
BindingResult result) {
//...some code here...
}
}
我想知道为什么 @valid 注释不像 JSR 303: Bean Validation 所说的那样递归地工作。谁能给我一个解决方案,以便我可以递归地验证我的对象,非常感谢!!!!
【问题讨论】:
-
也许第二个valid可以省略?第一个 Valid 应该级联整个模型。
-
我正在做一些与 Spring 3.2.4.RELEASE 非常相似的事情,并将
@Valid添加到我的等价物userInfoBasicModel中UserUpdateFormTransmitter让它为我工作。没有它,嵌套验证将被忽略。
标签: validation spring-mvc bean-validation hibernate-validator