Spring 数据转换

Spring3引入了更加通用的类型转换系统,其定义了SPI接口(Converter等)和相应的运行时执行类型转换的API(ConversionService等),在Spring中它和PropertyEditor功能类似,可以替代PropertyEditor来转换外部Bean属性的值到Bean属性需要的类型。

该类型转换系统是Spring通用的,其定义在org.springframework.core.convert包中,不仅仅在Spring Web MVC场景下。目标是完全替换PropertyEditor,提供无状态、强类型且可以在任意类型之间转换的类型转换系统,可以用于任何需要的地方,如SpEL、数据绑定。

1、类型转换器:提供类型转换的实现支持。

2、类型转换器注册器、类型转换服务:提供类型转换器注册支持,运行时类型转换API支持。

DefaultConversionService:默认的类型转换服务实现;

DefaultFormattingConversionService:带数据格式化支持的类型转换服务实现,一般使用该服务实现即可。

3、Spring内建的类型转换器如下所示:


类名


说明


第一组:标量转换器


StringToBooleanConverter


String----->Boolean

true:true/on/yes/1; false:false/off/no/0


ObjectToStringConverter


Object----->String

调用toString方法转换


StringToNumberConverterFactory


String----->Number(如Integer、Long等)


NumberToNumberConverterFactory


Number子类型(Integer、Long、Double等)<——> Number子类型(Integer、Long、Double等)


StringToCharacterConverter


String----->java.lang.Character

取字符串第一个字符


NumberToCharacterConverter


Number子类型(Integer、Long、Double等)——> java.lang.Character


CharacterToNumberFactory


java.lang.Character ——>Number子类型(Integer、Long、Double等)


StringToEnumConverterFactory


String----->enum类型

通过Enum.valueOf将字符串转换为需要的enum类型


EnumToStringConverter


enum类型----->String

返回enum对象的name()值


StringToLocaleConverter


String----->java.util.Local


PropertiesToStringConverter


java.util.Properties----->String

默认通过ISO-8859-1解码


StringToPropertiesConverter


String----->java.util.Properties

默认使用ISO-8859-1编码


第二组:集合、数组相关转换器


ArrayToCollectionConverter


任意S数组---->任意T集合(List、Set)


CollectionToArrayConverter


任意T集合(List、Set)---->任意S数组


ArrayToArrayConverter


任意S数组<---->任意T数组


CollectionToCollectionConverter


任意T集合(List、Set)<---->任意T集合(List、Set)

即集合之间的类型转换


MapToMapConverter


Map<---->Map之间的转换


ArrayToStringConverter


任意S数组---->String类型


StringToArrayConverter


String----->数组

默认通过“,”分割,且去除字符串的两边空格(trim)


ArrayToObjectConverter


任意S数组---->任意Object的转换

(如果目标类型和源类型兼容,直接返回源对象;否则返回S数组的第一个元素并进行类型转换)


ObjectToArrayConverter


Object----->单元素数组


CollectionToStringConverter


任意T集合(List、Set)---->String类型


StringToCollectionConverter


String----->集合(List、Set)

默认通过“,”分割,且去除字符串的两边空格(trim)


CollectionToObjectConverter


任意T集合---->任意Object的转换

(如果目标类型和源类型兼容,直接返回源对象;否则返回S数组的第一个元素并进行类型转换)


ObjectToCollectionConverter


Object----->单元素集合


第三组:默认(fallback)转换器:之前的转换器不能转换时调用


ObjectToObjectConverter


Object(S)----->Object(T)

首先尝试valueOf进行转换、没有则尝试new 构造器(S)


IdToEntityConverter


Id(S)----->Entity(T)

查找并调用public static T find[EntityName](S)获取目标对象,EntityName是T类型的简单类型


FallbackObjectToStringConverter


Object----->String

ConversionService作为恢复使用,即其他转换器不能转换时调用(执行对象的toString()方法)

S:代表源类型,T:代表目标类型

如上的转换器在使用转换服务实现DefaultConversionService和DefaultFormattingConversionService时会自动注册。

时间: 09-04

Spring 数据转换的相关文章

Spring MVC(三) 数据转换、格式化、校验

数据转换.格式化.校验 数据绑定机理 数据类型转换 低版本的Spring 只支持标准的PropertyEditor类型体系,不过PropertyEditor存在以下缺陷: 只能用于字符串和Java对象的转换,不适用于任意两个Java类型之间的转换: 对源对象及目标对象所在的上下文信息(如注解.所在宿主类的结构等)不敏感,在类型转换时不能利用这些上下文信息实施高级转换逻辑.有鉴于此,Spring 3.0在核心模型中添加了一个通用的类型转换模块,ConversionService是Spring类型转

Spring mvc数据转换 格式化 校验(转载)

原文地址:http://www.cnblogs.com/linyueshan/p/5908490.html 数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象2. DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换.数据格式化工作.将 Servlet 中的请求信息填充到入参对

Spring MVC数据转换

样例:把一个字符串封装而一个对象. 如:username:password格式的数据ZhangSan:1234.我们把这个数据封装成一个User对象.以下分别使用属性编辑器与转换器来实现. 1.自己定义属性编辑器 A.写一个属性编辑器继承PropertyEditorSupport package cn.framelife.mvc.converter; import java.beans.PropertyEditorSupport; import cn.framelife.mvc.entity.U

Spring batch的学习

Spring batch是用来处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定处理后输出成指定的形式. Spring batch主要有以下部分组成: JobRepository     用来注册job的容器 JobLauncher             用来启动Job的接口 Job                          实际执行的任务,包含一个或多个Step Step                        step包含ItemReader.ItemProces

spring mvc 的各种参数的绑定方式

本文转自http://www.cnblogs.com/HD/p/4107674.html SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input n

[Spring MVC] - SpringMVC的各种参数绑定方式

SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input name="count" value="10" ty

Spring MVC 流程图

Spring MVC 流程图 Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回: 3. Dispatc

Spring MVC (二 ) ---- 各种参数绑定方式

转载自:http://www.cnblogs.com/HD/p/4107674.html SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input n

Spring MVC 简述:从MVC框架普遍关注的问题说起

任何一个完备的MVC框架都需要解决Web开发过程中的一些共性的问题,比如请求的收集与分发.数据前后台流转与转换,当前最流行的SpringMVC和Struts2也不例外.本文首先概述MVC模式的分层思想与MVC框架普遍关注的问题,并以此为契机结合SpringMVC的入门级案例简要地从原理.架构角度介绍了它对这些问题的处理,包括请求处理流程.消息转换机制和数据绑定机制等核心问题.最后,本文对目前最为流行的两个MVC框架SpringMVC 和 一. MVC 模式与框架 1.MVC 模式 Java We