杰克逊 - 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));
有效。
我知道同一主题有几个问题,但我认为它们没有完全涵盖我在 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));
有效。