我有以下代码:
DTO:
Class MyDTO {
import java.util.Date;
private Date dateOfBirth;
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}
Controller
public void saveDOB(@RequestBody MyDTO myDTO, HttpServletRequest httprequest, HttpServletResponse httpResponse) {
System.out.println("Inside Controller");
System.out.println(myDTO.getDateOfBirth());
}
JSON 请求:
{
"dateOfBirth":"2014-09-04",
}
如果我将请求作为 yyyy-mm-dd 自动转换为日期对象。 Controller 中的输出:- dateOfBirth= 2014 年 9 月 4 日星期四 05:30:00
但是当我以 dd-mm-yyyy 格式发送 DateofBirth 时,它不会自动将 String 转换为 Date。所以我该如何处理这种情况。
JSON 请求:
{
"dateOfBirth":"04-09-2014",
}
输出:控制台没有输出,甚至没有到达 Controller 。
我已经尝试使用@DateTimeFormat,但它不起作用。
我正在使用 Spring 4.02 请建议是否有任何我们可以使用的注释。
最佳答案
@DateTimeFormat
用于表单支持(命令)对象。您的 JSON 由 Jackson 的 ObjectMapper
在 Spring 的 MappingJackson2HttpMessageConverter
中处理(默认情况下)(假设是 Jackson 的最新版本)。此 ObjectMapper
有许多它可以处理的默认日期格式。似乎 yyyy-mm-dd
是其中之一,但 dd-mm-yyyy
不是。
您需要使用 ObjectMapper
注册您自己的日期格式,并使用 MappingJackson2HttpMessageConverter
注册该 ObjectMapper
。这里有多种方法可以做到这一点:
或者,您可以在整个类或其字段之一(日期)上使用 JsonDeserializer
。以下链接中的示例
关于java - Spring 无法通过requestBody将String转换为Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646564/