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,后面文章会首先同步至公众号

相关推荐
weixin_462428478 分钟前
使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存
java·缓存
程序媛小果9 分钟前
基于java+SpringBoot+Vue的桂林旅游景点导游平台设计与实现
java·vue.js·spring boot
骑鱼过海的猫12311 分钟前
【java】java通过s3访问ceph报错
java·ceph·iphone
杨充17 分钟前
13.观察者模式设计思想
java·redis·观察者模式
Lizhihao_19 分钟前
JAVA-队列
java·开发语言
喵叔哟29 分钟前
重构代码之移动字段
java·数据库·重构
喵叔哟29 分钟前
重构代码之取消临时字段
java·前端·重构
fa_lsyk31 分钟前
maven环境搭建
java·maven
Daniel 大东1 小时前
idea 解决缓存损坏问题
java·缓存·intellij-idea
wind瑞1 小时前
IntelliJ IDEA插件开发-代码补全插件入门开发
java·ide·intellij-idea