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

相关推荐
uzong5 小时前
技术故障复盘模版
后端
GetcharZp5 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程6 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen6 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
没有bug.的程序员6 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋7 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国7 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Zyy~7 小时前
《设计模式》装饰模式
java·设计模式