我有以下代码:
DTO:
Class MyDTO {
import java.util.Date;
private Date dateOfBirth;
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}
控制器
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自动转换为日期对象。 控制器中的输出: - dateOfBirth = Thu Sep 04 05:30:00 IST 2014
但是当我以dd-mm-yyyy格式发送DateofBirth时,它不会自动将String转换为Date。所以我该如何处理这种情况。
JSON请求:
{
"dateOfBirth":"04-09-2014",
}
输出:控制台中没有输出甚至无法到达控制器。
我尝试使用@DateTimeFormat,但它没有用。
我正在使用Spring 4.02请建议我们可以使用任何注释。
答案 0 :(得分:13)
@DateTimeFormat
用于表单支持(命令)对象。您的JSON由Spring的ObjectMapper
中的MappingJackson2HttpMessageConverter
处理(默认情况下)(假设是Jackson的最新版本)。此ObjectMapper
具有许多可以处理的默认日期格式。似乎yyyy-mm-dd
就是其中之一,但dd-mm-yyyy
不是。
您需要使用ObjectMapper
注册自己的日期格式,并使用ObjectMapper
注册MappingJackson2HttpMessageConverter
。以下是各种方法:
或者,您可以在整个班级或其中一个字段(日期)上使用JsonDeserializer
。以下链接中的示例
答案 1 :(得分:1)
列出item创建一个扩展JsonDeserializer
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
在@JsonDeserialize(using = CustomJsonDateDeserializer.class)
方法上使用setter
注释。
感谢@Varun Achar
回答,url