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

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

  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类型

怎么注册呢?

  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的属性

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

getConversionService方法内部

  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

springMVC 前后台日期格式传值解决方式之一(共二) @DateTimeFormat的使用和配置的更多相关文章

  1. springMVC 前后台日期格式传值解决方式之二(共二) @InitBinder的使用

    关于springmvc日期问题的解决方式 除了本博客的[springMVC 前后台日期格式传值解决方式之 @DateTimeFormat的使用和配置]一文, 还有如下这种方式: 在Controller ...

  2. springmvc处理日期格式

    解决http400错误 通常有两个来源: 1 页面的下拉列表中传入了字符串,而服务器需要的是Integer类型的,所以服务器拒绝. 2, 浏览器传给服务器端的日期格式字符串,服务器端理解不了,所以需要 ...

  3. SpringMVC中日期格式的转换

    解决日期提交转换异常的问题 由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型.所以需要自定义参数绑定.前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestM ...

  4. 转:SpringMVC中日期格式的转换

    解决日期提交转换异常的问题 由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型.所以需要自定义参数绑定.前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestM ...

  5. SpringMVC post和get乱码解决方式

    如何解决POST请求中文乱码问题,GET的又如何处理呢? 在web.xml中加入: <filter>     <filter-name>CharacterEncodingFil ...

  6. SpringMVC问题- MultipartConfig 配置问题以及解决方式

    http://www.cnblogs.com/weilu2/p/springmvc_fileupload_with_servlet_3_0.html

  7. 【转载】SpringMVC前台给后台传值的方式

    转自:http://blog.csdn.net/flymoringbird/article/details/53126505 1. 基本数据类型(以int为例,其他类似): Controller代码: ...

  8. 关于Java中文乱码与日期格式

    关于Java中文乱码与日期格式 Java中文乱码的问题其实很普遍了,首先,一般不会在Windows平台下面出现,同时,一般在Tomcat应用服务器下也都正常,但是到了WebSphere,Weblogi ...

  9. 异步查询json传日期格式到前台,变成了时间戳的格式

    问题: 使用mybatis 查询mysql数据库,其中一个日期格式的字段,由异步查询使用 json传递到前台,变成了时间戳,而不是日期格式了.如何使查询出的日期展示成日期格式呢 解决办法: 1.尝试使 ...

随机推荐

  1. http模拟登录

    = =其实很简单,写这个的目的呢,是为了练习下Ruby而已 就是post到登录地址,得到cookie,然后以后的请求都用这个cookie就好了. require 'net/http' module E ...

  2. Grep查看日志的方法【转】

    转自:http://blog.csdn.net/stormkey/article/details/5905204 版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://go ...

  3. 请教一下16aspx上的源代码要如何在自己的服务器上运行

    很正常呀,,我下载的也有运行不成功的你要去他们16aspx论坛发帖子问这里很少有人回答你这样的问题

  4. python 设计模式之代理模式

    代理模式在一般形式上是一个类函数接口.代理可以是这些事物的接口:网络连接,存储的对象,文件,或者其他资源(昂贵的或者不容易复制的). 一个众所周知的代理模式的例子就是引用计数的指针对象. 代理模式是结 ...

  5. POJ 2987 Firing(最大权闭合图)

    [题目链接] http://poj.org/problem?id=2987 [题目大意] 为了使得公司效率最高,因此需要进行裁员, 裁去不同的人员有不同的效率提升效果,当然也有可能是负的效果, 如果裁 ...

  6. UVA 11134 Fabled Rooks 贪心

    题目链接:UVA - 11134 题意描述:在一个n*n(1<=n<=5000)的棋盘上放置n个车,每个车都只能在给定的一个矩形里放置,使其n个车两两不在同一行和同一列,判断并给出解决方案 ...

  7. 四. Java继承和多态5. instanceof 运算符

    多态性带来了一个问题,就是如何判断一个变量所实际引用的对象的类型 . C++使用runtime-type information(RTTI),Java 使用 instanceof 操作符. insta ...

  8. Android activity中单击返回键或home键彻底退出应用

    @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BAC ...

  9. 使用ARC也可能发生内存泄露

    1,循环参照 A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放. 这种问题常发生于把delegate声明为strong属性了. 例, @interface Samp ...

  10. 快速创建一个的指定大小的内容全为0xFF的文件

    比如需要创建一个大小为2KB,内容为全0xFF的文件 步骤只有两步: 第一步. dd if=/dev/zero of=./test.img bs=1 count=2048 第二步. 使用WinHex文 ...