博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC-自定义数据类型转换器
阅读量:5237 次
发布时间:2019-06-14

本文共 6589 字,大约阅读时间需要 21 分钟。

自定义类型转换器

201603005,今天想了一个问题,Spring中的Conventer是如何实现的,因为他没有绑定类中的属性,它怎么知道要将那个String转换?看了几遍的书也没有找到,后来想想,其实我已经知道了,他的名字就是答案,转换器,因为已经告诉他了目标类型,所以只要实体类中有这个类型,在使用springMVC表单对象时就会启动吧(这个结论是我猜的),但是另外一个问题产生了,如果项目中有多个地方那个有了时间,一个时间格式是yyyy-MM-dd,另一个是yyyy-MM-dd HH:mm:ss,那么此时该如果让Spring确定该用那个conventer呢(这个需求在我现在做的项目中就有这样)?? 

1.conversionService是Spring类型转换体系的核心借口

2.可以利用ConversionserviceFactoryBean在Spring的

IOC容器中定义一个ConversionService.

Spring将自动识别出IOC容器中的ConversionService,并在Bean

属性配置及SpringMVC处理方法入参绑定场合使用它进行数据的转换

3.可以通过ConversionServiceFactoryBean的ConversionServiceFactoryBean

的converters属性注册自定义的类型转换器

 <bean id="conversionService"

        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatters">
            <set>
                <bean class="app07a.formatter.DateFormatter">
                    <constructor-arg type="java.lang.String" value="MM-dd-yyyy" />
                </bean>
            </set>
        </property>
    </bean>

在上一篇文章中也有这个conversionService,但是没有自定义错误消息,页面直接把错误代码直接显示在页面了.

在Spring中很多地方都用FactoryBean来整合第三方的框架的bean

Spring支持的转换器

Spring定义了3种类型的转换器借口,实现任意一个转换器接口都可以作为自定义转换器

注册到ConversionServiceFactoryBean

-Converter<S,T>:将s类型转换为T类型对象

-coverterFactory: 将相同系列多个"同质"converter封装在一起,如果希望将一种

类型的对象转换为另一种类型及其子类的对象(例如将String转换为Number以及Number

子类(Integer,Long,Double等)对象)可使用该转换器工厂类

-GenericConverter:会根据源类对象及目标对象所在的宿主类中的上下问信息进行类型转换

<mvc:annotation-driver conversionService = "conversionService"/>会将自定义的ConversionService注册到Spring MVC的上下文中

 

这个是一个简单的转换器

1页面

product:

转换器的类

@Componentpublic class ProcuctConverter implements  Converter
{ @Override public Product convert(String source) { if(source != null) { Product product = new Product(); //java-javabase-12.0-2011.12.12 String[] values = source.split("-"); if(values != null && values.length==4) { product.setName(values[0]); product.setDescription(values[1]); product.setPrice(Float.parseFloat(values[2])); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); product.setProductionDate(new Date()); System.out.println(source + "--converter"+product); return product; } } return null; }

springmvc配置文件

记得要在annotation上加上这句

<mvc:annotation-driven conversion-service="conversionService" />

目标action

@Controllerpublic class testConversionService{    @RequestMapping(value="/testConversionServiceConverter")        public String test(@RequestParam("product") Product product )    {        System.out.println("/testConversionServiceConverter"+product);        return "ProductForm";    }}

现在再按照上篇博客的做法来找找咱们自己写的这个converter

ConversionService converters =

    java.lang.Boolean -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@5844d84b
    java.lang.Character -> java.lang.Number : org.springframework.core.convert.support.CharacterToNumberFactory@69367ae0
    java.lang.Character -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@7857fecb
    java.lang.Enum -> java.lang.String : org.springframework.core.convert.support.EnumToStringConverter@29f35b69
    java.lang.Number -> java.lang.Character : org.springframework.core.convert.support.NumberToCharacterConverter@2a3022e3
    java.lang.Number -> java.lang.Number : org.springframework.core.convert.support.NumberToNumberConverterFactory@3b1e1d56
    java.lang.Number -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@7847604d
    java.lang.String -> app07a.domain.Product : app07a.converters.ProcuctConverter@327961d9
    java.lang.String -> java.lang.Boolean : org.springframework.core.convert.support.StringToBooleanConverter@1f22dcc2
    java.lang.String -> java.lang.Character : org.springframework.core.convert.support.StringToCharacterConverter@3368b15d
    java.lang.String -> java.lang.Enum : org.springframework.core.convert.support.StringToEnumConverterFactory@7348de9a
    java.lang.String -> java.lang.Number : org.springframework.core.convert.support.StringToNumberConverterFactory@68874644
    java.lang.String -> java.util.Locale : org.springframework.core.convert.support.StringToLocaleConverter@203e4659
    java.lang.String -> java.util.Properties : org.springframework.core.convert.support.StringToPropertiesConverter@6b4fedc9
    java.lang.String -> java.util.UUID : org.springframework.core.convert.support.StringToUUIDConverter@a0a5207
    java.time.ZoneId -> java.util.TimeZone : org.springframework.core.convert.support.ZoneIdToTimeZoneConverter@3e4c9e1d
    java.time.ZonedDateTime -> java.util.Calendar : org.springframework.core.convert.support.ZonedDateTimeToCalendarConverter@346cc261
    java.util.Locale -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@5e465495
    java.util.Properties -> java.lang.String : org.springframework.core.convert.support.PropertiesToStringConverter@5854cbda
    java.util.UUID -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@66845d2f
    org.springframework.core.convert.support.ArrayToArrayConverter@54072bf1
    org.springframework.core.convert.support.ArrayToCollectionConverter@7231c593
    org.springframework.core.convert.support.ArrayToObjectConverter@404beb79
    org.springframework.core.convert.support.ArrayToStringConverter@4ef8c947
    org.springframework.core.convert.support.ByteBufferConverter@5208841f
    org.springframework.core.convert.support.ByteBufferConverter@5208841f
    org.springframework.core.convert.support.CollectionToArrayConverter@c45da14
    org.springframework.core.convert.support.CollectionToCollectionConverter@10ae797b
    org.springframework.core.convert.support.CollectionToObjectConverter@8a04154
    org.springframework.core.convert.support.CollectionToStringConverter@5df613f4
    org.springframework.core.convert.support.FallbackObjectToStringConverter@25a8080b
    org.springframework.core.convert.support.IdToEntityConverter@69f094c4,org.springframework.core.convert.support.ObjectToObjectConverter@7fcecd99
    org.springframework.core.convert.support.MapToMapConverter@6c4f3ba0
    org.springframework.core.convert.support.ObjectToArrayConverter@554c4aeb
    org.springframework.core.convert.support.ObjectToCollectionConverter@3f0c59b9
    org.springframework.core.convert.support.StringToArrayConverter@234d2bca
    org.springframework.core.convert.support.StringToCollectionConverter@17af60fb
Spring自带的转换器都在,红色标记的就是自己写的

 

转载于:https://www.cnblogs.com/rocky-AGE-24/p/5225204.html

你可能感兴趣的文章
元素自动居中显示
查看>>
JDBC 时间处理
查看>>
hadopp 环境搭建
查看>>
【2018】听懂你能看懂的句子
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
【BZOJ3052】【UOJ#58】【WC2013】糖果公园(树上莫队)
查看>>
荷兰国旗问题
查看>>
Process 启动参数问题
查看>>
提高PHP性能的10条建议
查看>>
我,不会吵,不会闹,心痛了用沉默代替
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
项目经理面试中可能遇到的问题(持续更新)
查看>>
【转】总结前端面试过程中最容易出现的问题
查看>>
Java- 简单了解线程 生产者与消费者问题(三)
查看>>
centos rancher 通过本机 docker images 新增container
查看>>
【原】PNG的使用技巧
查看>>
android studio 使用SVN 锁定文件,防止别人修改(基于Android studio 1.4 )
查看>>