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

相关推荐
码农BookSea几秒前
ReAct:让大模型学会边想边做
后端·ai编程
清心歌9 分钟前
CopyOnWriteArrayList 实现原理
java·开发语言
码农BookSea10 分钟前
10分钟掌握 JSON-RPC 协议,面试加分、设计不踩坑
后端
Java成神之路-30 分钟前
通俗易懂理解 Spring MVC 拦截器:概念、流程与简单实现(Spring系列16)
java·spring·mvc
zhanghongbin0131 分钟前
AI 采集器:Claude Code、OpenAI、LiteLLM 监控
java·前端·人工智能
计算机毕设vx_bysj686934 分钟前
【免费领源码】77196基于java的手机银行app管理系统的设计与实现 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·mysql·智能手机·课程设计
忘梓.34 分钟前
墨色规则与血色节点:C++红黑树设计与实现探秘
java·开发语言·c++
hhh3u3u3u34 分钟前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
凤年徐37 分钟前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法
IT_陈寒37 分钟前
Python的列表推导式里藏了个坑,差点让我加班到凌晨
前端·人工智能·后端