我正在使用@valid和@initbinder来验证传递给服务的数据,但我面临的问题是@InitBinder
仅在全球范围内工作,即。
@InitBinder // possible to leave off for global behavior
protected void initBinder(WebDataBinder binder){
binder.setValidator(new LoginRequestValidator());
}
而不是像我有一个名为LoginRequest的模型对象的特定模型属性:
@InitBinder("LoginRequest") // possible to leave off for global behavior
protected void initBinder(WebDataBinder binder){
binder.setValidator(new LoginRequestValidator());
}
在这种情况下,验证器根本没有被调用..这是正确的方法吗?或者我错过了什么?
答案 0 :(得分:16)
查看方法的签名必须是
@InitBinder("loginRequest")
小l
@InitBinder
的值可以是以下之一
答案 1 :(得分:4)
@ zeroflagL的答案很棒,但下面是另一种解决Spring相同问题的方法,更详细但类型安全:
@InitBinder
protected void initBinder(WebDataBinder binder){
if (binder.getTarget() != null
&& LoginRequest.class.equals(binder.getTarget().getClass())) {
binder.setValidator(new LoginRequestValidator());
}
}
这样我们就不依赖于硬编码的字符串,也不关心Spring如何暴露未命名的属性。