zoukankan      html  css  js  c++  java
  • springMVC 前后台日期格式传值解决方式之一(共二) @DateTimeFormat的使用和配置

    无意中发现对于时间字符串转Date类,根本不用自己去写转换类,spring mvc已经实现了该功能,还是基于注解的,轻松省事,使用 org.springframework.format.support.FormattingConversionServiceFactoryBean
    之后,只要在vo里加注解就行了

    使用时要引入一个类库joda-time-n.n.jar

    Java代码  收藏代码
    1. @DateTimeFormat(pattern="yyyy-MM-dd")  
    2. private Date dateRangeStart;// 通行日期范围开始  



    @DateTimeFormat(pattern="yyyy-MM-dd") 可将形如1980-0-01的字符串转换到Date类
    @NumberFormat(pattern="#,###.##") 可将形如4,500.00的字符串转换成long类型

    怎么注册呢?

    Java代码  收藏代码
    1. <bean id="conversionService"    
    2. class="org.springframework.format.support.FormattingConversionServiceFactoryBean">   
    3. <mvc:annotation-driven validator="validator"    
    4.     conversion-service="conversionService" />    



    使用<mvc:annotation-driven /> 的话,默认就启用FormattingConversionServiceFactoryBean了,所以上面的配置也省了。
    但是<mvc:annotation-driven />基本不用,因为总得做些个性化设置,那怎么注册FormattingConversionServiceFactoryBean给spring mvc呢?
    起初我以为得从DefaultAnnotationHandlerMapping入手,后来通过看<mvc:annotation- driven />的解析器AnnotationDrivenBeanDefinitionParser源码,才发现原来是 AnnotationMethodHandlerAdapter的属性

    Java代码  收藏代码
    1. RuntimeBeanReference conversionService = getConversionService(element, source, parserContext);  
    2. RuntimeBeanReference validator = getValidator(element, source, parserContext);  
    3.   
    4. RootBeanDefinition bindingDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class);  
    5. bindingDef.setSource(source);  
    6. bindingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);  
    7. bindingDef.getPropertyValues().add("conversionService", conversionService);  
    8. bindingDef.getPropertyValues().add("validator", validator);  
    9.   
    10. RootBeanDefinition annAdapterDef = new RootBeanDefinition(AnnotationMethodHandlerAdapter.class);  
    11. annAdapterDef.setSource(source);  
    12. annAdapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);  
    13. annAdapterDef.getPropertyValues().add("webBindingInitializer", bindingDef);  
    14. annAdapterDef.getPropertyValues().add("messageConverters", getMessageConverters(source));  


    getConversionService方法内部

    Java代码  收藏代码
    1. if (element.hasAttribute("conversion-service")) {  
    2.     return new RuntimeBeanReference(element.getAttribute("conversion-service"));  
    3. }  
    4. else {  
    5.     RootBeanDefinition conversionDef = new RootBeanDefinition(FormattingConversionServiceFactoryBean.class);  
    6.     conversionDef.setSource(source);  
    7.     conversionDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);  
    8.     String conversionName = parserContext.getReaderContext().registerWithGeneratedName(conversionDef);  
    9.     parserContext.registerComponent(new BeanComponentDefinition(conversionDef, conversionName));  
    10.     return new RuntimeBeanReference(conversionName);  
    11. }  



    原来<mvc:annotation-driven />是这么注册FormattingConversionServiceFactoryBean的
    如果不使用<mvc:annotation-driven />标签的话,只要配置AnnotationMethodHandlerAdapter的属性就可以了

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
         <!-- 支持@DateTimeFormat(pattern="yyyy-MM-dd")等注解  2015年7月31日11:07:03 liuyx-->
         <property name="webBindingInitializer">  
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">  
            <property name="conversionService">  
                <bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean>  
            </property>  
        </bean>  
        </property>
     </bean>

    原文:http://relive123-yahoo-com-cn.iteye.com/blog/1678376

  • 相关阅读:
    UOS系统进入单用户模式解决su: 鉴定故障和sudo: /usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位
    统一UOS操作系统 修改源地址
    linux cmake error no version information available
    Linux error /usr/bin/ld: cannot find -lJsoncpp
    容器时代的持续交付工具---Drone:Drone使用
    容器时代的持续交付工具---Drone:Drone介绍与安装
    asp.net core 中灵活的配置方式
    View Components as Tag Helpers,离在线模板编辑又进一步
    asp.net core mvc中如何把二级域名绑定到特定的控制器上
    提供服务注册描述信息来简化服务注册方式
  • 原文地址:https://www.cnblogs.com/flying607/p/4691650.html
Copyright © 2011-2022 走看看