杰克逊 - LocalDateTime 格式

Jackson - LocalDateTime format

我知道同一主题有几个问题,但我认为它们没有完全涵盖我在 Spring Boot 2 应用程序中的问题。

我有一个使用 LocalTimeDate 的模型。通过 rest api 获取它工作正常,日期格式为 "date":"2019-12-17T08:50:00"

我创建了 Serializer,以便自定义 json 输出,因为存在我不想扩展的引用字段。

自定义序列化器中的相关代码为

jgen.writeStringField("date", formatter.format(value.date));

格式化程序为

private SimpleDateFormat formatter  = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

我使用自定义序列化程序 class 将 @JsonSerialize 应用到模型 class。结果是

{"timestamp":"2019-12-25T10:57:50.482+0000","status":500,"error":"Internal Server Error","message":"Could not write JSON: Cannot format given Object as a Date; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Cannot format given Object as a Date (through reference chain: java.util.ArrayList[0])","path":"/api/v1/climates"}

我以 https://codeboje.de/jackson-java-8-datetime-handling/ 为指导,因此更新了 pom 和 application.properties,然后让 Spring 发挥它的魔力。

有什么我遗漏的吗?

您需要使用 java.time.format.DateTimeFormatter。你的情况:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");

您可以像废弃的 SimpleDateFormat class.

一样使用它

所以最后我选择了

jgen.writeStringField("date", value.getDate().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));

有效。