【发布时间】:2021-05-27 09:10:20
【问题描述】:
我有一个字段类型为 LocalDate 的类:
public class MyClass {
private LocalDate myDate;
}
我必须将值存储为 yyyy-MM-dd 而不是 [yyyy, M, d]
如https://stackoverflow.com/a/38731094/10850340 (DateTimeFormatter.ISO_LOCAL_DATE) 中所示,可以创建 LocalDateSerializer
在我的场景中,接收数据的来源有多个。其中一个发送日期为 ISO_INSTANT '2011-12-03T10:15:30Z'。 LocalDateDeserializer:
public class LocalDateDeserializer extends StdDeserializer<LocalDate> {
private static final long serialVersionUID = 1L;
protected LocalDateDeserializer() {
super(LocalDate.class);
}
@Override
public LocalDate deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
return LocalDate.parse(jp.readValueAs(String.class));
}
}
抛出以下警告:
已解决[org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Text '2021-02-25T00:52:00.000Z' could not be parsed, unparsed text found at index 10;嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: Text '2021-02-25T00:52:00.000Z' could not be parsed, unparsed text found at index 10 (through reference chain: MyClass["myDate"])]
我的理解是接收到的字符串无法解析为LocalDate:LocalDate.parse(jp.readValueAs(String.class));
让 LocalDateDeserializer 接受任何有效日期格式但返回 LocalDate
【问题讨论】:
-
如果字符串是
2012-04-15T22:05:43Z,那么在我的时区已经是 4 月 16 日,所以不是可以从字符串中读取的日期。在这种情况下,您想要哪个日期? -
我明白了,我没有考虑过这种情况。在我的情况下,它将是字符串的日期;日期由只选择日期而不是时间的用户输入。但随后接收到的数据带有不相关的时间信息。
标签: java json jackson json-deserialization localdate