后台接收datetime_springMVC 前后台日期格式传值解决方式之一(共二) @DateTimeFormat的使用和配置...

时间:2025-04-01 18:11:36

无意中发现对于时间字符串转Date类,根本不用自己去写转换类,spring mvc已经实现了该功能,还是基于注解的,轻松省事,使用

之后,只要在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代码  

class="org.springframework.">

conversion-service="conversionService" />

使用 的话,默认就启用FormattingConversionServiceFactoryBean了,所以上面的配置也省了。

但是基本不用,因为总得做些个性化设置,那怎么注册FormattingConversionServiceFactoryBean给spring mvc呢?

起初我以为得从DefaultAnnotationHandlerMapping入手,后来通过看

driven

/>的解析器AnnotationDrivenBeanDefinitionParser源码,才发现原来是

AnnotationMethodHandlerAdapter的属性

Java代码  

RuntimeBeanReference conversionService = getConversionService(element, source, parserContext);

RuntimeBeanReference validator = getValidator(element, source, parserContext);

RootBeanDefinition bindingDef = new RootBeanDefinition();

(source);

(BeanDefinition.ROLE_INFRASTRUCTURE);

().add("conversionService", conversionService);

().add("validator", validator);

RootBeanDefinition annAdapterDef = new RootBeanDefinition();

(source);

(BeanDefinition.ROLE_INFRASTRUCTURE);

().add("webBindingInitializer", bindingDef);

().add("messageConverters", getMessageConverters(source));

getConversionService方法内部

Java代码  

if (("conversion-service")) {

return new RuntimeBeanReference(("conversion-service"));

}

else {

RootBeanDefinition conversionDef = new RootBeanDefinition();

(source);

(BeanDefinition.ROLE_INFRASTRUCTURE);

String conversionName = ().registerWithGeneratedName(conversionDef);

(new BeanComponentDefinition(conversionDef, conversionName));

return new RuntimeBeanReference(conversionName);

}

原来是这么注册FormattingConversionServiceFactoryBean的

如果不使用标签的话,只要配置AnnotationMethodHandlerAdapter的属性就可以了