Spring MVC数据转换、格式化和数据校验(学习笔记)

2018-09-20  本文已影响47人  secondtown

Spring使用Converter转换器进行源类型对象到目标类型对象的转换。而Formatter完成任意类型对象(Object)与String之间的类型转换,也即是格式化和解析。Formatter可以将String转换成Java类型,例如用于表单中的用户输入。
ConversionService组件进行数据类型转换、数据格式化工作。它是Spring类型转换体系的核心接口。ConversionServiceFactoryBean中可以内置很多的类型转换器,如果需要自定义类型转换器,可以在ConversionServiceFactoryBean中定义convertes属性。

    //class具体路径部分有所省略
    <bean id="conversionService" class=".ConversionServiceFactoryBean">
            <property name="converters">
                <list>
                    <bean class=".StringToDateConverter"/>
                </list>
            </property>
    </bean>

《Spring MVC中的信息转换(学习笔记)》一文中,讲到了HttpMessageConvert<T>是Spring3.0之后新增的一个重要接口,它负责将请求信息转换为一个对象(类型为T),并将对象绑定到请求方法的参数中或输出为响应信息。
  而MappingJackson2HttpMessageConverter(针对JSON的一种信息转换器,实现了HttpMessageConvert接口)可以处理JSON格式的请求或者响应信息。
这里有讲到Spring在org.springframework.core.convert.convert中定义了3种类型的转换器接口:ConverterConverterFactoryGenericConverter
此外,还可以使用@InitBinder添加自定义编辑器。
需要用一个类实现PropertyEditor接口,一般可以通过继承PropertyEditorSupport,然后再在Controller文件中通过注解来初始化注册属性编辑器。

@InitBinder
public void InitBinder(WebDataBinder binder){
    //  注册自定义编辑器,其中DataEditor是自定义的编辑器类
    inder.registerCustomEditor(Date.class,new DateEditor());
}

还有一种方法是使用WebBindingInitializer注册全局自定义编辑器来转换数据。这时候的配置方法跟配置HttpMessageConverter有点像,是在AnnotationMethodHandlerAdapter中进行配置。

    <!-- 通过AnnotationMethodHandlerAdapter装配自定义编辑器 -->
<bean
    class=".AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class=".DateBindingInitializer" />
    </property>
</bean>

多种转换器的优先顺序

1、查询通过@InitBinder装配的自定义编辑器。
2、查询通过ConversionService装配的自定义编辑器。
3、查询通过WebBindingInitializer接口装配的全局自定义编辑器。

上一篇 下一篇

猜你喜欢

热点阅读