在做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;
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
通过注解来协助SpringMVC处理日期在前后端的传递问题
从前端向后端传递日期:
@DateTimeFormat(pattern="yyyy-MM-dd")
前台向后台传递字符串类型的日期参数时,需要通过此注解将字符串解析成日期类型,其中日期格式可以根据需要进行设置。
例子:如果后台接收的createDate为Java.util.Date类型,但前台传递过来的是2016-05-23,那么此时我们需要使用@DateTimeFormat注解来修饰createDate字段,否则SpringMVC认为传递过来的是字符串与日期类型不匹配而报400错误(HTTP Status 400 The request sent by the client was syntactically incorrect)。
从后端向前端传递日期:
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
SpringMVC向前端返回json格式的数据时,日期类型默认返回时间戳,那么我们可以通过此注解将时间返回为固定格式的字符串。
使用此注解需要引入一下jar包(需要特别注意的是jackson最新的版本对此功能不兼容,因此建议选择2.6.1或者以下的版本):
-
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-mapper-asl</artifactId>
- <version>1.9.13</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>2.6.1</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.6.1</version>
- </dependency>
本文转自http://blog.youkuaiyun.com/kylinah/article/details/53101068 感谢作者