Spring -- 自定义转换器
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 -- 自定义转换器的更多相关文章
- spring mvc 自定义转换器
<!-- 注册转化器 --> <mvc:annotation-driven conversion-service="conversionService" /> ...
- spring自定义schema学习
[转载请注明作者和原文链接,欢迎讨论,相互学习.] 一.前言 1. 最近在学习dubbo,里边很多如provider.consumer.registry的配置都是通过spring自定义Schema来实 ...
- Struts2 请求数据的自动封装 及 自定义转换器类
请求数据自动封装: 实现原理:使用了参数拦截器.struts-default.xml中 <interceptor name="params" class="com. ...
- Flask自定义转换器,实现路由匹配正则表达式参数
Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式 # 路由 ...
- Spring自定义类扫描器 ClassPathScanningCandidateComponentProvider
项目中有个需求 读取xml文件,然后 对xml文件进行解析,比如如果是 Gender=0/1的话,分别代表男女. 所以需要在构造函数之后,初始化bean之前进行过滤解析 xml文件: <inte ...
- struts2自定义转换器
Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...
- flask自定义转换器
根据具体的需求,有些时候是需要用到正则来灵活匹配URL,但是Flask的路由匹配机制是不能直接在路由里直接写正则的,这时候就需要使用转换器! Flask的默认转换器: DEFAULT_CONVERTE ...
- spring 自定义标签的实现
在我们进行Spring 框架开发中,估计用到最多的就是bean 标签吧,其实在Spring中像<mvc/><context/>这类标签以及在dubbo配置的标签都是属于自定义的 ...
- Retrofit 2.0基于OKHttp更高效更快的网络框架 以及自定义转换器
时间关系,本文就 Retrofit 2.0的简单使用 做讲解 至于原理以后有空再去分析 项目全面.简单.易懂 地址: 关于Retrofit 2.0的简单使用如下: https://gitee.c ...
随机推荐
- 【学亮IT手记】jQuery each()函数用法实例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- vue.js 添加 fastclick的支持
fastclick:处理移动端click事件300毫秒延迟 1.兼容性 iOS 3及更高版本的移动Safari iOS 5及更高版本的Chrome Android上的Chrome(ICS) Opera ...
- IIS下载地址
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=1038
- 牛客练习赛13F m皇后
题目链接:https://ac.nowcoder.com/acm/contest/70/F 题目大意: 略 分析: 可以分成四步计算冲突:水平方向,垂直方向,左斜线方向,右斜线方向.只要会处理水平方向 ...
- php 将数组转换网址URL参数
$array =array ( 'id' =123, 'name' = 'dopost' );echo http_build_query( $array );//得到结果id=123name=dopo ...
- scrapy的一些容易忽视的点(模拟登陆,传递item等)
scrapy爬虫注意事项 一.item数据只有最后一条 这种情况一般存在于对标签进行遍历时,将item对象放置在了for循环的外部.解决方式:将item放置在for循环里面. 二.item字段传递 ...
- Python实现百度贴吧自动顶贴机
开发这款小工具,我们需要做一些准备: url.txt:多个需要顶起的帖子地址. reply:多条随机回复的内容. selenium:浏览器自动化测试框架 首先,我们先使用pip完成selenium的安 ...
- 解析xml文件 selectSingleNode取不到节点
今天在做批量生成XML的时候,碰到一个情况 解析xml文件 selectSingleNode一直返回NULL. XML的格式开头有一句这个<CE401Message xmlns="ht ...
- Web API 2 Entity Framework 使用 Procedure
Recently I worked on a project, which I started as code first and then I forced to switch to Databas ...
- poj2100(尺取法)
题意:选取一系列数,使得这些数的平方和等于n: 解题思路:尺取法扫一遍: #include<iostream> #include<algorithm> using namesp ...