java - Spring 无法通过requestBody将String转换为Date

标签 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;
            }

    }

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/

相关文章:

java - Thread.sleep 不 hibernate 当前线程

javascript - 使用键值获取对 JSON/JS 对象中任意(深层)嵌套节点的引用

android - 如何在我的 Android 项目中使用 Spring 框架?

java - 突出显示图像之间的差异

java - 如何使用在主类中调用/设置的另一个类在类上设置值

json - 在 swift3 中将 json 数据转换为数组

javascript - 为什么 JavaScript 中只显示数组的最后一个元素而不是所有元素

java - 从 Java 8 迁移到 java 11 - 无法加载 jdk.internal.util 类 (java.lang.NoClassDefFoundError)

java - 更改 Fragment 方向布局时 addView() 中出现错误

java - 数据库审计表