SpringMVC对日期类型的转换
本文内容纲要:
在做web开发的时候,页面传入的都是String类型,SpringMVC可以对一些基本的类型进行转换,但是对于日期类的转换可能就需要我们配置。
1、如果查询类使我们自己写,那么在属性前面加上@DateTimeFormat(pattern="yyyy-MM-dd"),即可将String转换为Date类型,如下
@DateTimeFormat(pattern="yyyy-MM-dd")
privateDatecreateTime;
2、如果我们只负责web层的开发,就需要在controller中加入数据绑定:
1@InitBinder
2publicvoidinitBinder(WebDataBinderbinder){
3SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd");
4dateFormat.setLenient(false);
5binder.registerCustomEditor(Date.class,newCustomDateEditor(dateFormat,true));//true:允许输入空值,false:不能为空值
3、可以在系统中加入一个全局类型转换器
实现转换器
1publicclassDateConverterimplementsConverter<String,Date>{
2@Override
3publicDateconvert(Stringsource){
4SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd");
5dateFormat.setLenient(false);
6try{
7returndateFormat.parse(source);
8}catch(ParseExceptione){
9e.printStackTrace();
10}
11returnnull;
12}
进行配置:
<beanid="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<propertyname="converters">
<list>
<beanclass="com.doje.XXX.web.DateConverter"/>
</list>
</property>
</bean>
<mvc:annotation-drivenconversion-service="conversionService"/>
4、如果将日期类型转换为String在页面上显示,需要配合一些前端的技巧进行处理。
5、SpringMVC使用@ResponseBody返回json时,日期格式默认显示为时间戳。
1@Component("customObjectMapper")
2publicclassCustomObjectMapperextendsObjectMapper{
3
4publicCustomObjectMapper(){
5CustomSerializerFactoryfactory=newCustomSerializerFactory();
6factory.addGenericMapping(Date.class,newJsonSerializer<Date>(){
7@Override
8publicvoidserialize(Datevalue,JsonGeneratorjsonGenerator,
9SerializerProviderprovider)throwsIOException,JsonProcessingException{
10SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
11jsonGenerator.writeString(sdf.format(value));
12}
13});
14this.setSerializerFactory(factory);
15}
16}
配置如下:
<mvc:annotation-driven>
<mvc:message-converters>
<beanclass="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<propertyname="objectMapper"ref="customObjectMapper"></property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
6、date类型转换为json字符串时,返回的是longtime值,如果需要返回指定的日期的类型的get方法上写上@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8"),即可将json返回的对象为指定的类型。
@DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss")
@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")
publicDategetCreateTime(){
returnthis.createTime;
}
本文内容总结:
原文链接:https://www.cnblogs.com/lcngu/p/5785805.html