Java 如何将@requestBody映射到特定的initBinder方法?

Java 如何将@requestBody映射到特定的initBinder方法?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有如下代码: 控制器 验证 问题是,我不知道如何将obj参数与特定的initBinder方法“挂钩”,我需要运行该方法以使用自定义验证器类自动验证obj。我需要某种方法在将obj参数绑定到请求主体后运行特定的@InitBinder方法 另外,我必须使用@RequestBody,因为控制器方法在请求体中接收JSON负载 我认为将@InitBinder方法与doStuff()方法放在同一个控制器类中就足够了 或者,您也可以为MyValidator创建自定义注释,并将其应用于MyClass中的类级别

我有如下代码:

控制器 验证 问题是,我不知道如何将
obj
参数与特定的
initBinder
方法“挂钩”,我需要运行该方法以使用自定义验证器类自动验证
obj
。我需要某种方法在将
obj
参数绑定到请求主体后运行特定的
@InitBinder
方法


另外,我必须使用
@RequestBody
,因为控制器方法在请求体中接收JSON负载

我认为将
@InitBinder
方法与
doStuff()
方法放在同一个控制器类中就足够了


或者,您也可以为
MyValidator
创建自定义注释,并将其应用于
MyClass
中的类级别,而不是使用
@InitBinder
。这还有一个额外的好处,就是在任何方法调用上启动并运行,其中一个参数是
@Valid MyClass obj

如果您只有一个参数类型,那么将InitBinder与rorschach提到的相同控制器类中就足够了。 否则,可以指定要绑定到的参数的类名(以小写字母开头):

@InitBinder("myClass")
public void initBinder(WebDataBinder binder, HttpServletRequest request) {
  binder.setValidator(new MyValidator());
}
public String doStuff(@Valid @RequestBody MyClass obj, BindingResult result) {
  ... 
}
@InitBinder("myClass2")
public void initBinder2(WebDataBinder binder, HttpServletRequest request) {
  binder.setValidator(new MyValidator2());
}
public String doStuff2(@Valid @RequestBody MyClass2 obj, BindingResult result) {
  ... 
}
我不确定它在文档中的确切位置解释了这一点,但javadoc for InitBinder确实说明了以下内容:

在此处指定模型属性名称或请求参数名称 将init binder方法限制为那些特定的 属性/参数

所以我猜默认情况下,参数名是以小写字母开头的类的名称

@InitBinder
public void initBinder(WebDataBinder binder, HttpServletRequest request) {
  binder.setValidator(new MyValidator());
}
@InitBinder("myClass")
public void initBinder(WebDataBinder binder, HttpServletRequest request) {
  binder.setValidator(new MyValidator());
}
public String doStuff(@Valid @RequestBody MyClass obj, BindingResult result) {
  ... 
}
@InitBinder("myClass2")
public void initBinder2(WebDataBinder binder, HttpServletRequest request) {
  binder.setValidator(new MyValidator2());
}
public String doStuff2(@Valid @RequestBody MyClass2 obj, BindingResult result) {
  ... 
}