无意中发现对于时间字符串转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. Microsoft SilverLightt是一个跨浏览器的、跨平台的插件,为网络带来下一代基于.NETFramework的媒体体验和丰富的交互式应用程序。

    Microsoft Silverlight是一个跨浏览器的.跨平台的插件,为网络带来下一代基于.NETFramework的媒体体验和丰富的交互式应用程序.Silverlight提供灵活的编程模型,并可 ...

  2. matlab fft demo

    clf; fs=32;N=1024;   %采样频率和数据点数 n=0:N-1; t=n/fs;   %时间序列 x=1*sin(t); %信号 y=fft(x,N);    %对信号进行快速Four ...

  3. Cocos2d-x中图字原理之深入分析

    http://cache.baiducontent.com/c?m=9d78d513d9921cfe05ac94281a16a632451294247c89df4f3992d15f9217465c02 ...

  4. V4或者V7包重复冲突,但是不知道删除那个的问题

    加这行代码在dependencies统一级别 configurations { all*.exclude group: 'com.android.support', module: 'support- ...

  5. Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证

    一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...

  6. Dom4J读写xml

    解析读取XML public static void main(String[] args) { //1获取SaxReader对象 SAXReader reader=new SAXReader(); ...

  7. 解决:高版本jdk编译低版本代码时eclipse提示Access restriction:The type 'Unsafe' is not accessible due to restriction on required library

    在Eclipse中采用高版本jdk编译一些低版本的源码时,由于源码中使用了一些高版本中过时的API,可能就会报错,类似于: Access restriction:The type 'Unsafe' i ...

  8. laravel 安装碰到的问题:全局安装 Laravel Installer,然后用下面的指令创建新项目: laravel new blog报连接超时解决方案

    在执行laravel new project 的时候报错 cURL error 7: Failed to connect to cabinet.laravel.com port 80: Timed o ...

  9. (10)java基础知识-字符串

    String s和 new String 的区别 String s1="hello"; String s2= new String("hello"); Stri ...

  10. uva11107(后缀数组)

    uva11107 题意 输入 n 个 DNA 序列,求出长度最大的字符串,使得它在超过一半的 DNA 序列中连续出现.如果有多解,按字典序输出. 分析 论文 后缀数组经典题.加深几个关键数组的印象. ...