2

我正在尝试使用 @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

有什么想法吗?

4

1 回答 1

2

所以对于遇到这个问题的任何人......这是我为解决它所做的。

而不是拥有

<context:component-scan base-package="com.myapp.spring"></context:component-scan> 

在我的 root-context.xml

我将其更改为我的配置包

<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>
于 2014-02-24T03:57:11.327 回答