SpringMVC时间Date格式转换,400错误
2016-04-25 16:06
405 查看
转自:http://relive123-yahoo-com-cn.iteye.com/blog/1678376
spring mvc前台时间字符串到后台Date的转换
无意中发现对于时间字符串转Date类,根本不用自己去写转换类,spring mvc已经实现了该功能,还是基于注解的,轻松省事,使用org.springframework.format.support.FormattingConversionServiceFactoryBean 之后,只要在vo里加注解就行了
Java代码
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date dateRangeStart;// 通行日期范围开始
@DateTimeFormat(pattern="yyyy-MM-dd") 可将形如1980-0-01的字符串转换到Date类
@NumberFormat(pattern="#,###.##") 可将形如4,500.00的字符串转换成long类型
怎么注册呢?
Java代码
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<mvc:annotation-driven validator="validator"
conversion-service="conversionService" />
使用<mvc:annotation-driven /> 的话,默认就启用FormattingConversionServiceFactoryBean了,所以上面的配置也省了。
但是<mvc:annotation-driven />基本不用,因为总得做些个性化设置,那怎么注册FormattingConversionServiceFactoryBean给spring mvc呢?
起初我以为得从DefaultAnnotationHandlerMapping入手,后来通过看<mvc:annotation-driven />的解析器AnnotationDrivenBeanDefinitionParser源码,才发现原来是AnnotationMethodHandlerAdapter的属性
Java代码
RuntimeBeanReference conversionService = getConversionService(element, source, parserContext);
RuntimeBeanReference validator = getValidator(element, source, parserContext);
RootBeanDefinition bindingDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class);
bindingDef.setSource(source);
bindingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
bindingDef.getPropertyValues().add("conversionService", conversionService);
bindingDef.getPropertyValues().add("validator", validator);
RootBeanDefinition annAdapterDef = new RootBeanDefinition(AnnotationMethodHandlerAdapter.class);
annAdapterDef.setSource(source);
annAdapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
annAdapterDef.getPropertyValues().add("webBindingInitializer", bindingDef);
annAdapterDef.getPropertyValues().add("messageConverters", getMessageConverters(source));
getConversionService方法内部
Java代码
if (element.hasAttribute("conversion-service")) {
return new RuntimeBeanReference(element.getAttribute("conversion-service"));
}
else {
RootBeanDefinition conversionDef = new RootBeanDefinition(FormattingConversionServiceFactoryBean.class);
conversionDef.setSource(source);
conversionDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
String conversionName = parserContext.getReaderContext().registerWithGeneratedName(conversionDef);
parserContext.registerComponent(new BeanComponentDefinition(conversionDef, conversionName));
return new RuntimeBeanReference(conversionName);
}
原来<mvc:annotation-driven />是这么注册FormattingConversionServiceFactoryBean的
如果不使用<mvc:annotation-driven />标签的话,只要配置AnnotationMethodHandlerAdapter的属性就可以了
Java代码
<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>
相关文章推荐
- Javadoc转换chm帮助文档的两种方法总结
- 解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
- myeclipse添加用户自己定义的类库
- [Java]代理模式
- 与java技术相关的中外书籍
- java 平台 权限管理
- SpringMVC实现注解式权限验证
- eclipse关联git的方法 (二)
- Eclipse中安装插件的几种方式。
- java动态代理(JDK和cglib)
- Spring MVC 通过@Value注解读取.properties配置
- 最大连续子数组和
- Java中的instanceof,isInstance和isAssignableFrom
- Java中Downcasting向下转型的用处
- 用Java来获取访问者真实的IP地址(来源:收集)
- Java基础--Java并发总结
- 二、JAVA语法基础
- Java中的访问权限控制
- Java多线程:Thread类中的主要方法
- Spring源码分析(一)-Spring IoC容器的设计