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. mysql sql执行计划

    查看Mysql执行计划 使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show pro ...

  2. 在linux上安装Scala详细步骤

    scala在linux安装很简单,就是下载,解压,配置环境变量,source一下成功. 提君博客原创 >>提君博客原创 http://www.cnblogs.com/tijun/ < ...

  3. druid 连接Oracle时出现的错误

    转博主https://blog.csdn.net/jiangyu1013/article/details/70237550#commentsedit mysql 更新 SQL 语句 无错误 批量 报错 ...

  4. 防火墙禁ping:虚拟机ping不通主机,但主机可以ping虚拟机

    现象:刚装的centos6.6,配置好网络却发现ping不通主机,主机却ping通虚拟机: 解决方法: 1.最简单的方法就是:关闭防火墙.但一直关闭防火墙也不是个办法,会遇到很多安全问题,建议下一个方 ...

  5. Linux基础学习(13)--Linux系统管理

    第十三章——Linux系统管理 一.进程管理 1.进程查看: (1)进程简介:进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源. (2)进程管理的 ...

  6. groovy安装 ideal

    参考:https://blog.csdn.net/newbie_907486852/article/details/80879745 (1) 首先下载groovy: https://gradle.or ...

  7. linux通过命令行查看MySQL编码并修改-简洁版方法

    云服务器环境:CentOS 7.4 因为服务器配置较低,故使用MySQL5.5 未进行设置前 1.查看字符编码: mysql> show variables like '%character%' ...

  8. CentOS 7 vi编辑命令

    用vi打开一个yum文件 vi /usr/bin/yum 按 i 键后  进入insert模式,进入insert模式后才能进行修改 修改完成后 按esc键进入command模式, 然后:wq 保存文件 ...

  9. Jenkins+PowerShell持续集成环境搭建(二)控制台项目

    1. 新建一个名字为HelloWorld.Console的Freesyle项目: 2. 配置源码管理: 3. 编译配置: 版本:选择MSBuild4 文件:D:\CI\Config\HelloWorl ...

  10. Vue渲染函数

    前面的话 Vue 推荐在绝大多数情况下使用 template 来创建HTML.然而在一些场景中,真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更 ...