Spring @initBinder 方法在控制器中只调用一次

Spring @initBinder method to be called only once inside a controller

我有一个 class,用 @RestController 注释,@ControllerAdvice 有我的请求映射方法 (@RequestMapping)。同样在这个 class 中,我添加了一个方法 public void initBinder(WebDataBinder dataBinder),它用 @InitBinder 注释并负责注册一些自定义编辑器。 具体来说就是一个propertyEditor把String转Enum

我注意到在我的控制器中每次调用 @RequestMapping 方法时,都会调用我的 initBinder 方法。因为在我看来这个编辑器注册应该只发生一次(控制器的初始化),所以我希望它只被设置(调用)一次。

有办法吗?

或者,您可以使用 BindingInitializer 的实现来注册您的自定义编辑器。您必须在应用上下文文件中定义 class "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" 的 bean,并使用 BindingInitializer 的实现设置其 "webBindingInitializer" 属性。

在任何情况下,WebDataBinder 的范围都是针对请求的。希望这有帮助。