我正在尝试为我的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。
有人能指出我所缺少的东西吗?
由于
答案 0 :(得分:0)
您的格式化程序应该实现Formatter<T>
,其中T将是您案例中的ObjectId