1.自定义类型转换器
spring默认有类型转换器,但在实际开发中,因需求的不同,spring默认类型转型器可能会不满足我们的要求,在这种情况下我们就需要使用自定义类型转换器。
例如时间格式为2020-01-01这种时间格式,spring就无法满足转换的要求,就会报转换异常。
其spring默认转换格式为2020/01/01即yyyy/MM/dd格式,其他时间格式都不满足。那么就需要我们自定义转换器来进行处理。
配置自定义转换器,需要三个步骤。
1、编写实现于interface Converter<S, T> 接口的自定义转换类,
a.泛型S为转换前的类型
b.泛型T为转换之后的类型
2、在spring中注册自定义转换类
3、将自定义转换类配置进spring转换类ConversionServiceFactoryBean中
-
编写实体Person.java
public class Person { 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; } }
-
编写自定义转换类
public class MyConverter implements Converter<String, Date> { public String format; public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } @Override public Date convert(String s) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); Date parse = null; try { parse = simpleDateFormat.parse(s); } catch (ParseException e) { e.printStackTrace(); } return parse; } }
-
配置XML
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--注册Person类--> <bean id="person" class="com.spring.demo.converter.Person"> <property name="name" value="sylvan" /> <property name="birthday" value="2020-04-01" /> </bean> <!--注册自定义转换类myconverter--> <bean id="myconverter" class="com.spring.demo.converter.MyConverter"> <property name="format" value="yyyy-MM-dd" /> </bean> <!--将自定义转换类交由spring转换类管理--> <!--注意:id必须为conversionService,否则会报转换异常--> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <ref bean="myconverter"/> </set> </property> </bean> </beans>
-
测试
@Test public void test1() { ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/ApplicationContext.xml"); Person person = (Person) ctx.getBean("person"); System.out.println(person.getBirthday() +" " +person.getName()); } 输出: 17:40:02.159 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1de76cc7 17:40:02.330 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 3 bean definitions from class path resource [ApplicationContext.xml] 17:40:02.393 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'conversionService' 17:40:02.409 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'myconverter' 17:40:02.502 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'person' Wed Apr 01 00:00:00 CST 2020 sylvan