Spring 定义了 3 种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到 ConversionServiceFactoryBean 中:

Converter<S,T>:将 S 类型对象转为 T 类型对象;

ConverterFactory:将相同系列多个 “同质” Converter 封装在一起。如果希望将一种类型的对象转换为另一种类型及其子类的对象(例如将 String 转换为 Number 及 Number 子类(Integer、Long、Double 等)对象)可使用该转换器工厂类;

GenericConverter:会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换。

举个例子来实现下自定义转换器:

例如Employee对象,现在在页面提交的时候内容是“zhangsan,aaa@qq.com,1,101”,需要转化为Employee对象进行保存。

首先先看Employee对象:

public class Employee {
private Integer id;
private String lastName;
private String email;
private Integer gender;
private Date birth;
private Department department;
}

“zhangsan”赋给lastName;

“aaa@qq.com”赋给email;

“1”给gender;

“101”给Department ;

再看下Department的结构:

public class Department {

    private Integer id;
private String departmentName;
}

上面的JavaBean省略了构造和get set细节,具体代码里面应该写上,博客里面就不累赘。

然后自定义转换器:

import org.springframework.core.convert.converter.Converter;

import com.soyoungboy.bean.Department;
import com.soyoungboy.bean.Employee;
/**
* string转Employee
* @author MSI1
*
*/
public class StringToEmployeeConverter implements Converter<String, Employee> { @Override
public Employee convert(String str) {
String strTrim = str.trim();
if (strTrim != null && !strTrim.equals("")) {
String[] strs = strTrim.split(",");
// zhangsan,aaa@qq.com,1,101,将字符串转化为字符串数组,然后通过构造函数拼装进指定属性
Employee employee = new Employee(null, strs[0], strs[1], Integer.parseInt(strs[2]),
new Department(Integer.parseInt(strs[3]), ""));
return employee;
}
return new Employee();
} }

配置文件里面配置:

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<bean class="com.atguigu.StringToEmployeeConverter"></bean>
</property>
</bean>

将自定义的转换器注册到Spring上下文中去。

jsp界面:

 <form action="${ctp }/quickadd" method="post">

        <!-- 员工的所有信息全部写上;用-分隔

        zhangsan-aaa@qq.com-1-101

          -->

        员工信息:<input name="empInfo" value="zhangsan,aaa@qq.com,1,101" style="width: 300px;"/>

        <input type="submit" value="快速添加"/>

    </form>

测试代码:

@RequestMapping("/quickadd")
public String quickAdd(@RequestParam("empInfo")Employee emp){
System.out.println(emp);
employeeDao.save(emp);
return "redirect:/emps";
}

Spring -- 自定义转换器的更多相关文章

  1. spring mvc 自定义转换器

    <!-- 注册转化器 --> <mvc:annotation-driven conversion-service="conversionService" /> ...

  2. spring自定义schema学习

    [转载请注明作者和原文链接,欢迎讨论,相互学习.] 一.前言 1. 最近在学习dubbo,里边很多如provider.consumer.registry的配置都是通过spring自定义Schema来实 ...

  3. Struts2 请求数据的自动封装 及 自定义转换器类

    请求数据自动封装: 实现原理:使用了参数拦截器.struts-default.xml中 <interceptor name="params" class="com. ...

  4. Flask自定义转换器,实现路由匹配正则表达式参数

    Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式 # 路由 ...

  5. Spring自定义类扫描器 ClassPathScanningCandidateComponentProvider

    项目中有个需求 读取xml文件,然后 对xml文件进行解析,比如如果是 Gender=0/1的话,分别代表男女. 所以需要在构造函数之后,初始化bean之前进行过滤解析 xml文件: <inte ...

  6. struts2自定义转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...

  7. flask自定义转换器

    根据具体的需求,有些时候是需要用到正则来灵活匹配URL,但是Flask的路由匹配机制是不能直接在路由里直接写正则的,这时候就需要使用转换器! Flask的默认转换器: DEFAULT_CONVERTE ...

  8. spring 自定义标签的实现

    在我们进行Spring 框架开发中,估计用到最多的就是bean 标签吧,其实在Spring中像<mvc/><context/>这类标签以及在dubbo配置的标签都是属于自定义的 ...

  9. Retrofit 2.0基于OKHttp更高效更快的网络框架 以及自定义转换器

    时间关系,本文就 Retrofit 2.0的简单使用 做讲解  至于原理以后有空再去分析 项目全面.简单.易懂  地址: 关于Retrofit 2.0的简单使用如下:  https://gitee.c ...

随机推荐

  1. 字符串和ASCII之间的转换

    public class CharToAscii { public static void main(String[] args) { CharToAscii.AscToString(); CharT ...

  2. [转帖]SAP S/4 HANA与SAP Business Suite/R3(ECC)的区别

    SAP S/4 HANA与SAP Business Suite/R3(ECC)的区别 https://blog.csdn.net/zhongguomao/article/details/5351520 ...

  3. 【学亮IT手记】jQuery callback方法实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  4. zTree树形菜单使用实例

    在每个节点添加 id 和 pid, id 表示当前节点编号,pid 表示父节点编号 第一步:在页面显示菜单位置,添加 ul设置 class=”ztree” 第二步:开启简单数据格式支持 第三步:编写树 ...

  5. Android——MaterialDesign之二DrawerLayout

    滑动菜单--DrawerLayout 滑动菜单就是把一些菜单选项隐藏起来,而不是放置主屏幕中,然后可以通过滑动的方式将菜单显示出来,具有非常的画面效果,就是类似侧边滑动. 例子:需要上一次的Toolb ...

  6. ConnectTimeout和ReadTimeout所代表的意义

    参考:ConnectTimeout和ReadTimeout所代表的意义 ConnectTimeout 指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间. 在java中,网络状况 ...

  7. Yii2控制台命令

    Yii2控制台表格输出: 例如: $in_sheet_number_queue = []; $wms_material_in_sheet_list = \core\models\WmsMaterial ...

  8. memcach 命令行

    1. cmd上登录memcache # telnet 127.0.0.1 11211   2. 列出所有items stats items     3. 通过itemid获取key 接下来基于列出的i ...

  9. string.Format出现异常:输入字符串的格式不正确 Exception during StringFormat

    错误信息:Exception during StringFormat:输入字符串的格式不正确 “System.FormatException”类型的未经处理的异常在 mscorlib.dll 中发生 ...

  10. hdu-1058(map)

    题意:输出第n个能拆分成由,2,3,5,7中的一个或者多个组成的数: 解题思路:a[i+1]=a[i]*2;a[i+2]=a[i]*3;a[i+3]=a[i]*5;a[i+4]=a[i]*7;然后把重 ...