(1)自定义类型转换器

原创
2020/07/26 22:23
阅读数 125

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
    
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部