无法在spring中通过requestBody将String转换为Date

时间:2014-09-03 14:09:51

标签: java json spring spring-mvc serialization

我有以下代码:

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请建议我们可以使用任何注释。

2 个答案:

答案 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