在做web开发的时候,页面传入的都是String类型,SpringMVC可以对一些基本的类型进行转换,但是对于日期类的转换可能就需要我们配置。
1、如果查询类使我们自己写,那么在属性前面加上@DateTimeFormat(pattern = "yyyy-MM-dd") ,即可将String转换为Date类型,如下
1
2
|
@DateTimeFormat (pattern = "yyyy-MM-dd" )
private Date createTime;
|
2、如果我们只负责web层的开发,就需要在controller中加入数据绑定:
1
2
3
4
5
|
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
dateFormat.setLenient( false );
binder.registerCustomEditor(Date. class , new CustomDateEditor(dateFormat, true )); //true:允许输入空值,false:不能为空值
|
3、可以在系统中加入一个全局类型转换器
实现转换器
1
2
3
4
5
6
7
8
9
10
11
12
|
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
dateFormat.setLenient( false );
try {
return dateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null ;
}
|
进行配置:
1
2
3
4
5
6
7
|
< bean id = "conversionService" class = "org.springframework.format.support.FormattingConversionServiceFactoryBean" >
< property name = "converters" >
< list >
< bean class = "com.doje.XXX.web.DateConverter" />
</ list >
</ property >
</ bean >
|
1
|
< mvc:annotation-driven conversion-service = "conversionService" />
|
4、如果将日期类型转换为String在页面上显示,需要配合一些前端的技巧进行处理。
5、SpringMVC使用@ResponseBody返回json时,日期格式默认显示为时间戳。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Component ( "customObjectMapper" )
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
CustomSerializerFactory factory = new CustomSerializerFactory();
factory.addGenericMapping(Date. class , new JsonSerializer<Date>() {
@Override
public void serialize(Date value, JsonGenerator jsonGenerator,
SerializerProvider provider) throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
jsonGenerator.writeString(sdf.format(value));
}
});
this .setSerializerFactory(factory);
}
}
|
配置如下:
1
2
3
4
5
6
7
|
< mvc:annotation-driven >
< mvc:message-converters >
< bean class = "org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
< property name = "objectMapper" ref = "customObjectMapper" ></ property >
</ bean >
</ mvc:message-converters >
</ mvc:annotation-driven >
|
6、date类型转换为json字符串时,返回的是long time值,如果需要返回指定的日期的类型的get方法上写上@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") ,即可将json返回的对象为指定的类型。
1
2
3
4
5
|
@DateTimeFormat (pattern= "yyyy-MM-dd HH:mm:ss" )
@JsonFormat (pattern= "yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8" )
public Date getCreateTime() {
return this .createTime;
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/lcngu/p/5785805.html