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

use*_*727 8 java serialization spring json spring-mvc

我有以下代码:

DTO:

 Class MyDTO {
        import java.util.Date;
        private Date dateOfBirth;

        public Date getDateOfBirth() {
                return dateOfBirth;
            }
        public void setDateOfBirth(Date dateOfBirth) {
                this.dateOfBirth = dateOfBirth;
            }

    }
Run Code Online (Sandbox Code Playgroud)

调节器

public void saveDOB(@RequestBody MyDTO myDTO, HttpServletRequest httprequest, HttpServletResponse httpResponse) {
       System.out.println("Inside Controller");
       System.out.println(myDTO.getDateOfBirth()); 
}
Run Code Online (Sandbox Code Playgroud)

JSON请求:

{
"dateOfBirth":"2014-09-04",

}
Run Code Online (Sandbox Code Playgroud)

如果我发送请求为yyyy-mm-dd自动转换为日期对象发生. 控制器输出: - dateOfBirth = Thu Sep 04 05:30:00 IST 2014

但是当我以dd-mm-yyyy格式发送DateofBirth时它不会自动将String转换为Date.所以我怎么能处理这种情况.

JSON请求:

{
"dateOfBirth":"04-09-2014",

}
Run Code Online (Sandbox Code Playgroud)

输出:否控制台中的输出甚至没有到达控制器.

我试过@DateTimeFormat,但它不起作用.

我正在使用Spring 4.02请建议我们可以使用任何注释.

Sot*_*lis 14

@DateTimeFormat用于表单后备(命令)对象.你的JSON是由杰克逊ObjectMapper在Spring的处理(默认情况下)MappingJackson2HttpMessageConverter(假设杰克逊的最新版本).它ObjectMapper有许多可以处理的默认日期格式.它似乎yyyy-mm-dd是其中之一,但dd-mm-yyyy事实并非如此.

您需要使用a ObjectMapper注册自己的日期格式并将其注册ObjectMapperMappingJackson2HttpMessageConverter.以下是各种方法:

或者,您可以JsonDeserializer在整个类或其中一个字段(日期)上使用a .以下链接中的示例