admin管理员组文章数量:1565292
在《springMVC4(9)属性编辑器剖析入参类型转换原理 》一文中,我们通过分析Sping内置的属性编辑器来理解springMVC是如何完成请求参数到入参的类型的转换的。而在新版本中,SpringMVC使用了新的架构来完成类型转换的工作,而且它的工作更加强大,支持格式化参数输入输出,它的另一个实例可见我的另一篇文章《springMVC4(4)json与对象互转实例解析请求响应数据转换器》。在文中,我们使用了Spring内置的格式转换器完成了服务端输入输出过程中json字符串与java对象的相互转换。此外,还提到了其他多种的格式转换器,如xml、ByteArray等。下面,我们以自定义格式转换器的实现思路,来理解新架构的类型转换器的使用方法,同时在实际开发中,我们可能会有自己的格式转换需求,这个时候我们也可以通过自定义格式转换器来完成这些个性化需求。
自定义格式转换器
完成自定义转换器需要实现以下三个中的任意一个接口:Convertor<S,T>
、GenericConvertor或ConvertorFacoty。下面我们对这些接口进行逐一分析:
1. Convertor<S,T>
这是最为简单的一个接口,定义了从源类到目标类的转换方法。该接口的定义如下
public interface ConverterFactory<S, R> {
//将S类型的对象转换为T类型,R为目标类型T的基类
<T extends R> Converter<S, T> getConverter(Class<T> targetType);
}
2. GenericConvertor
GenericConvertor会根据源类对象及目标类对象所在宿主类的上下文信息进行类型转换工作,该接口的定义如下:
public interface GenericConverter {
//ConvertiblePair包含了源类型和目标类型,它的定义在下面
Set<ConvertiblePair> getConvertibleTypes();
//TypeDescriptor包含了需转换类型对象所在宿主类的信息,我们根据此信息,完成源到目标类型的转换
Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType);
/**
* 内部类定义
*/
public static final class ConvertiblePair {
//源类型
private final Class<?> sourceType;
//目标类类型
private final Class<?> targetType;
/**
* 创建一个源-目标对子
*/
public ConvertiblePair(Class<?> sourceType, Class<?> targetType) {
Assert.notNull(sourceType, "Source type must not be null");
Assert.notNull(targetType, "Target type must not be null");
this.sourceType = sourceType;
this.targetType = targetType;
}
public Class<?> getSourceType() {
return this.sourceType;
}
public Class<?> getTargetType() {
return this.targetType;
}
//忽略hashCode\equals\toString等重写方法
}
}
我们常使用其实现类接口:
public
版权声明:本文标题:springMVC4(10)强大类型转换器实例解析 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1726967486a1092381.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论