Spring MVC自定义转换器无法正常工作

时间:2015-07-08 19:16:16

标签: java spring spring-mvc

我正在尝试为我的Spring MVC应用程序创建一个自定义Converter,但它永远不会被触发。

以下是我如何实施并注册的:

public class ObjectIdSpringConverter implements Converter<String, ObjectId>{

    public ObjectIdSpringConverter(){
        System.out.println("ObjectIdSpringConverter picked up ");
    }

    @Override
    public ObjectId convert(String source) {
        System.out.println("ObjectIdSpringConverter converting");
        return new ObjectId(source);        
    }
}

在我的Spring MVC配置中,我注册如下:

 @Configuration
 @ComponentScan(basePackages = {"myapp.web.controller"}) 
 public class SpringMvcConf  extends WebMvcConfigurationSupport{

   @Override
   protected void addFormatters(FormatterRegistry registry) {
       registry.addConverter(new ObjectIdSpringConverter());
   }
   //other stuff here
}

我在转换器的构造函数和convert()方法中放置了一些断点,我可以看到它是正确构造的,但是从不调用convert()方法,导致我的控制器接收到错误的值。

这是一个示例控制器方法:

  @Controller
  public class HomeController {

         @RequestMapping(value="/home/testObjectId.amlgm", method = RequestMethod.GET)
         public ObjectId testObjectId(ObjectId oid){
            System.out.println("expected 552952cec9ac88712ee0d36b, actual " + oid.toString());
            System.out.println(oid);
            return oid;
         }

   }

我知道永远不会调用convert方法,因为断点永远不会被击中,因为该值不是预期值。我还调试/跟踪了Spring正在做什么,它似乎没有使用我的转换器来实例化控制器方法的参数ObjectId。

有人能指出我所缺少的东西吗?

由于

1 个答案:

答案 0 :(得分:0)