Spring5深入浅出篇:Spring自定义类型转换器

Spring5深入浅出篇:Spring自定义类型转换器

类型转换器

首先要知道什么叫做类型转换器 ,我们通过配置的属性值是以字符串的形式为什么在查看对象成员变量时已经变成了int,这就是Spring的内置类型转换器帮我们做了自动类型转换.

作⽤:Spring通过类型转换器把配置⽂件中字符串类型的数据,转换成了对象中成员变量对应类型的数据,进⽽完成了注⼊

⾃定义类型转换器

原因:当Spring内部没有提供特定类型转换器时,⽽程序员在应⽤的过程中还需要使⽤,那么就需要程序员⾃⼰定义类型转换器.

比如我们现在有这样的一个需求,有一个含有Date类型的成员变量的类Person

typescript 复制代码
public class Person implements Serializable {
    private String name;
    private Date birthday;
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public Date getBirthday() {
        return birthday;
    }
​
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

我们通过配置文件去进行注入

applicationContext.xml

ini 复制代码
 <bean id="person" class="com.baizhiedu.converter.Person">
        <property name="name" value="suns"/>
        <property name="birthday" value="2020-04-01"/>
    </bean>

这样的方式在测试时就会发生报错,无法将String类型转换为Date.这个时候就需要我们通过定义一个自定义类型转换器来实现这个功能

开发步骤

  • 需要实现 implements Converter接⼝

MyDateConverter.java

vbnet 复制代码
public class MyDateConverter implements Converter<String, Date> {
 /*
 convert⽅法作⽤:String ---> Date
 SimpleDateFormat sdf = new
SimpleDateFormat();
 sdf.parset(String) ---> Date
 param:source 代表的是配置⽂件中 ⽇期字符串 <value>2020-10-
11</value>
 return : 当把转换好的Date作为convert⽅法的返回值后,Spring⾃动的
为birthday属性进⾏注⼊(赋值)
 */
 @Override
 public Date convert(String source) {
 Date date = null;
 try {
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 date = sdf.parse(source);
 } catch (ParseException e) {
 e.printStackTrace();
 }
 return date;
 }
}

Converter上的泛型参数第一个是当前为什么类型,第二个参数是需要转换成什么类型,所以第一个是String字符串类型,第二个是需要转换成Date类型

  • 在Spring的配置⽂件中进⾏配置
ini 复制代码
<bean id="myDateConverter" class="xxxx.MyDateConverter"/>
  • 进行注册转换器
xml 复制代码
⽬的:告知Spring框架,我们所创建的MyDateConverter是⼀个类型转换器
<!--⽤于注册类型转换器-->
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFac
toryBean">
 <property name="converters">
 <set>
 <ref bean="myDateConverter"/>
 </set>
 </property>
</bean>

细节

  • MyDateConverter中的⽇期的格式,通过依赖注⼊的⽅式,由配置⽂件完成赋值
typescript 复制代码
public class MyDateConverter implements Converter<String, Date> {
 private String pattern;
 public String getPattern() {
 return pattern;
 }
 public void setPattern(String pattern) {
 this.pattern = pattern;
 }
 /*
 convert⽅法作⽤:String ---> Date
 SimpleDateFormat sdf = new
SimpleDateFormat();
 sdf.parset(String) ---> Date
 param:source 代表的是配置⽂件中 ⽇期字符串 <value>2020-10-
11</value>
 return : 当把转换好的Date作为convert⽅法的返回值后,Spring⾃动的
为birthday属性进⾏注⼊(赋值)
 */
 @Override
 public Date convert(String source) {
 Date date = null;
 try {
 SimpleDateFormat sdf = new SimpleDateFormat(pattern);
 date = sdf.parse(source);
 } catch (ParseException e) {
 e.printStackTrace();
 }
 return date;
 }
}

applicationContex.xml

xml 复制代码
<!--Spring创建MyDateConverter类型对象-->
<bean id="myDateConverter"
class="com.baizhiedu.converter.MyDateConverter">
 <property name="pattern" value="yyyy-MM-dd"/>
</bean>
  • ConversionSeviceFactoryBean 定义 id属性 值必须 conversionService ,改成其他就会继续报错类型转换异常
  • Spring框架内置⽇期类型的转换器
scss 复制代码
⽇期格式:2020/05/01 (不⽀持 :2020-05-01)

以上便是本文的全部内容,我是全干程序员demo,每天为你带来最新好用的开发运维工具,如果你觉得用,请点赞,让更多的人了解相关工具

如果你想了解更多关于全干程序员demo,还有更多付费工具免费破解如JB全家桶,可以关注公众号-全干程序员demo,后面文章会首先同步至公众号

相关推荐
GraduationDesign几秒前
基于SpringBoot的蜗牛兼职网的设计与实现
java·spring boot·后端
今天不学习明天变拉吉9 分钟前
大批量数据导入接口的优化
java·excel
小手cool10 分钟前
取多个集合的交集
java
颜淡慕潇11 分钟前
【K8S问题系列 | 20 】K8S如何删除异常对象(Pod、Namespace、PV、PVC)
后端·云原生·容器·kubernetes
全栈老实人_12 分钟前
农家乐系统|Java|SSM|VUE| 前后端分离
java·开发语言·tomcat·maven
customer0815 分钟前
【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)
java·vue.js·spring boot·后端·kafka·开源·旅游
点点滴滴的记录32 分钟前
Java的CompletableFuture实现原理
java·开发语言·javascript
xiaolingting33 分钟前
Java 引用是4个字节还是8个字节?
java·jvm·引用·指针压缩
一只傻小白,38 分钟前
JAVA项目中freemarker静态模板技术
java·开发语言
袁庭新38 分钟前
Spring Boot项目接收前端参数的11种方式
java·springboot·袁庭新·如何接收前端数据·boot接收数据