我正在尝试在@ControllerAdvice类中使用@InitBinder注释方法注册全局InitBinder。
package com.myapp.spring.configuration;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@ControllerAdvice
@EnableWebMvc
public class CustomInitBinder {
@InitBinder
public void initBinder(WebDataBinder binder) {
System.out.println("INIT BINDER");
binder.registerCustomEditor(java.sql.Date.class, new SqlDatePropertyEditor());
binder.registerCustomEditor(java.sql.Timestamp.class, new SqlTimestampPropertyEditor());
}
}
我遇到的问题是我看到它在加载时找到@InitBinder,但它实际上从未进入该方法,因为我没有将“INIT BINDER”打印到System.out。 这意味着自定义编辑器没有注册,因此它们不起作用。 如果我将initBinder方法复制并粘贴到我的一个控制器中,它对于该特定的控制器就可以正常工作。
1989 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] (RequestMappingHandlerAdapter.java:636) - Detected @InitBinder methods in customInitBinder
有什么想法在这里发生了什么?
答案 0 :(得分:2)
所以对于遇到这个问题的人来说......这就是我为解决它而采取的措施。
而不是
<context:component-scan base-package="com.myapp.spring"></context:component-scan>
我将其更改为配置包
<context:component-scan base-package="com.myapp.spring.configuration"></context:component-scan>
然后我将@ControllerAdvice注释类移到了com.myapp.spring.controllers,并在servlet-context.xml中添加了
<context:component-scan base-package="com.myapp.spring.controllers">
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>