0%

6.2 数据转换 6.2.1 ConversionService

6.2 数据转换

Java语言中,在java.beans包中提供了一个ProperyEditor接口来进行数据转换。ProperyEditor的核心功能是将一个字符串转换为一个Java对象,以便根据界面的输入或配置文件中的配置字符串构造出一个Java对象。但是ProperyEditor存在以下不足:
只能用于字符串和Java对象的转换,不适用于任意两个Java类型直接的转换
对源对象及目标对象所在的上下文信息(如注解等)不敏感,在类型转换时不能利用这些上下文信息实施高级转换逻辑

6.2.1 ConversionService

Spring从3.0开始,添加了一个通用的类型转换模块,该类型转换模块位于org.springframework.core.convert包中。Spring希望用这个类型转换体系替换Java标准的ProperyEditor接口。但是由于历史原因,Spring还是同时支持两者。我们可以在SpringMVC处理方法的参数绑定中使用它们进行数据转换。
org.springframework.core.convert.ConversionServiceSpring类型转换体系的核心接口,在该接口中定义了以下4个方法:

方法 描述
boolean canConvert(Class<?> sourceType,Class<?> targetType) 判断是否可以将一个Java类转换为另一个Java
boolean canConvert(TypeDescriptor sourceType,TypeDescriptor targetType) 需要转换的类将以成员变量的方式出现,TypeDescriptor不但描述了需要转换类的信息,还描述了类的上下文信息,例如成员变量上的注解成员变量是否以数组、集合或Map的方式呈现等。类型转换逻辑可以利用这些信息做出各种灵活的控制。
<T>T convert(Object source,Class<T> targetType) 将源类型对象转换为目标类型对象
Object convert(Object source ,TypeDescriptor sourceType,TypeDescriptor targetType) 将对象从源类型对象转换为目标类型对象,通常会利用到类中的上下文信息。

在Spring配置文件中配置

可以利用org.springframework.context.support.ConversionServiceFactoryBeanSpring的上下文中定义一个ConversionServiceSpring将自动识别出上下文中的ConversionService,并在SpringMVC处理方法的参数绑定中使用它进行数据转换。示例配置代码如下:

1
此处有代码后面补上

默认支持转换类型

ConversionServiceFactoryBean中可以内置很多的类型转换器,使用它们可以完成大多数Java类型的转换工作,其除了包括将Spring对象转换为各种基础类型的对象外,还包括StringNumberArrayCollectionMapPropertiesObject之间的转换器。

注册自定义的类型转换器

可以通过ConversionServiceFactoryBeanconverters属性注册自定义的类型转换器,示例配置代码如下:

1
此处有代码后面补上

原文链接: 6.2 数据转换 6.2.1 ConversionService