在将Web请求绑定(bind)到模型对象方面,我在使用Spring的DataBinder和ConversionService时在使用和目的方面遇到一些困惑。之所以出现这种情况,是因为我最近尝试通过添加来使用JSR-303验证。

在此之前,我使用了:

<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="mypackage.GlobalWebBindingInitializer" />
    </property>
</bean>

这很好,因为我想要一个可以由多个Controller使用的全局DataBinder。
在GlobalWebBindingInitialzer类中,实现以下几种方法:
binder.registerCustomEditor(MyClass.class, new PropertyEditorSupport(MyClass.class)

但是我想使用@Valid注释,所以添加了。这样做的副作用是上面的AnnotationMethodHandlerAdapter bean已经被定义为注释驱动的一部分,因此我的全局数据绑定(bind)器被忽略了。

所以现在我创建了这个类:
public class MyClassConverter implements Converter<String, MyClass>

我很困惑。如果要使用,我应该使用转换服务而不是databinder?

最佳答案

从历史上看,Spring的数据绑定(bind)用于将数据转换为javabeans。它非常依赖JavaBean PropertyEditor进行转换。

Spring 3.0 added new and different support用于转换和格式化。其中一些更改包括“core.convert”包和“format”包,根据文档“可以用作PropertyEditor的更简单替代方案”。

现在,要回答您的问题,是的,看起来您处在正确的轨道上。您可以继续使用其中任何一种,但是总而言之,在许多情况下,您应该可以使用转换器而不是数据绑定(bind)器。

有关如何添加验证is available online的文档。

09-05 20:06