@initbinder不适用于特定的模型属性

我正在使用@valid和@initbinder来validation传递给服务的数据,但我面临的问题是@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()); } 

在这种情况下,validation器根本没有被调用..这是正确的方法吗? 还是我错过了什么?

看看你的方法的签名必须是

 @InitBinder("loginRequest") 

小l

@InitBinder的值可以是以下之一

  • 模型属性的名称
  • 请求参数的名称
  • 如果以上都不适用,则可以使用类的名称,但以小写字母开头 。 这就是Spring如何向模型公开未命名的属性。

@ zeroflagL的答案很棒,但下面是另一种解决Spring相同问题的方法,更详细但类型安全:

 @InitBinder protected void initBinder(WebDataBinder binder){ if (binder.getTarget() != null && LoginRequest.class.equals(binder.getTarget().getClass())) { binder.setValidator(new LoginRequestValidator()); } } 

这样我们就不依赖于硬编码字符串,也不关心Spring如何暴露未命名的属性。