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 的范围都是针对请求的。希望这有帮助。
我有一个 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 的范围都是针对请求的。希望这有帮助。