JSON Java 8 LocalDateTime 格式 in Spring Boot

2022-08-31 07:47:41

我在Spring Boot应用程序中格式化Java 8 LocalDateTime时遇到了一个小问题。对于“正常”日期,我没有问题,但是LocalDateTime字段将转换为以下内容:

"startDate" : {
    "year" : 2010,
    "month" : "JANUARY",
    "dayOfMonth" : 1,
    "dayOfWeek" : "FRIDAY",
    "dayOfYear" : 1,
    "monthValue" : 1,
    "hour" : 2,
    "minute" : 2,
    "second" : 0,
    "nano" : 0,
    "chronology" : {
      "id" : "ISO",
      "calendarType" : "iso8601"
    }
  }

虽然我想将其转换为类似的东西:

"startDate": "2015-01-01"

我的代码如下所示:

@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
    return startDate;
}

但是上述任何一个注释都不起作用,日期会像上面一样不断格式化。欢迎提出建议!


答案 1

更新:Spring Boot 2.x 不再需要此配置。我在这里写了一个更新的答案


(这是在Spring Boot 2.x之前这样做的方法,对于在旧版本的Spring Boot上工作的人来说可能很有用)

我终于在这里找到了如何做到这一点。为了修复它,我需要另一个依赖项:

compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.4.0")

通过包含此依赖项,Spring将自动为其注册转换器,如此处所述。之后,您需要将以下内容添加到 application.properties:

spring.jackson.serialization.write_dates_as_timestamps=false

这将确保使用正确的转换器,并且日期将以以下格式打印2016-03-16T13:56:39.492

仅当要更改日期格式时才需要批注。


答案 2

我添加了依赖项,并开始以下格式获取日期:com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1

"birthDate": [
    2016,
    1,
    25,
    21,
    34,
    55
  ]

这不是我想要的,但我越来越近了。然后我添加了以下内容

spring.jackson.serialization.write_dates_as_timestamps=false

到apprament.properties文件,它给了我我需要的正确格式。

"birthDate": "2016-01-25T21:34:55"