Spring 自定义类型转换器
时间:2022-07-24
本文章向大家介绍Spring 自定义类型转换器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是类型转换器 ❓
来看下面一个例子:
这里有一个实体类 Person
public class Person {
private String name;
private Integer age;
private Date date;
...
}
如果我们在配置文件中这么注入的话:
<bean class="edu.lsu.pojo.Person" id="person">
<property name="name" value="小王"/>
<property name="date" value="2000-08-21"/>
</bean>
就会报下面的错误 ❌:
看错误的提示信息是因为 String 类型无法转为 Date 类型。
因为我们这里指定的日期格式为 2000-08-21
,而 Spring 只支持将 2000/08/21
格式的字符串转化为 Date 类型。
所以才会报错,但是也有解决办法,Spring 也考虑到了这种情况,所以为我们提供了 Converter 接口,我们可以自定义类型转化。而 Converter
接口就是类型转化器。
定义类型转化器
Converter<String, Date>
该接口有两个泛型,第一个泛型指的是原始类型,第二个是目标类型,在我们的案例中是 String 和 Date。
public class MyConverter implements Converter<String, Date> {
@Override
public Date convert(String s) {
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
使用 SimpleDateFormat
即可实现功能。
然后还需要在 Spring 的配置文件中配置。
- 首先需要让 Spring 能将类型转换器的对象创建出来;
- 然后要让 Spring 知道你自定义了类型转换器,所以需要注册类型转换器。
1、 <bean class="edu.lsu.converter.MyConverter" id="myConverter"/>
2、 <bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionService">
<property name="converters" ref="myConverter"/>
</bean>
注意这里的第二步的 id 值必须是 conversionService
,不然会报错,因为 Spring 会根据这个 id 值创建对象,如果你改了他就找不到了。
再次运行代码就不会出现问题了。
date=Mon Aug 21 00:00:00 CST 2000
对于上面的代码还可以进一步的优化,比如日期格式是经常要变得,所以我们完全可以将格式分离出来,进一步的解耦合。
public class MyConverter implements Converter<String, Date> {
private String pattern;
public String getPattern() {
return pattern;
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
@Override
public Date convert(String s) {
Date date = null;
try {
date = new SimpleDateFormat(pattern).parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
配置文件修改为:
<bean class="edu.lsu.converter.MyConverter" id="myConverter">
<property name="pattern" value="yyyy-MM-dd"/>
</bean>
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android 监听软键盘状态的实例详解
- Android 中 ActivityLifecycleCallbacks的实例详解
- Android 优化Handler防止内存泄露
- Android Spinner 组件的应用实例
- Android编程实现扭曲图像的绘制功能示例
- 直播带货APP开发,圆形旋转动画
- 显存优化:纹理压缩功能介绍与使用说明
- Android编程简易实现XML解析的方法详解
- Android中SeekBar拖动条控件使用方法详解
- Android编程简单解析JSON格式数据的方法示例
- Android控件BottomSheet实现底边弹出选择列表
- Android中CheckBox复选框控件使用方法详解
- Android Recyclerview实现水平分页GridView效果示例
- Android编程之ListView和EditText发布帖子隐藏软键盘功能详解
- 建造者模式_动力节点Java学院整理