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

相关推荐
陈随易1 分钟前
C++26 草案被否,二十八年来头一回
前端·后端·程序员
金銀銅鐵44 分钟前
同一个 Hello World,Kotlin 和 Java 在字节码层面差在哪
jvm·后端·kotlin
憧憬成为java架构高手的小白1 小时前
LangGraph4j 实战(下)
java
天诰1 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
IT_陈寒4 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala4 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
这个昵称不容易5 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长5 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
文丑颜不良啊7 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼7 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发