【发布时间】:2017-11-09 09:29:09
【问题描述】:
我有以下 JSON:
{
"id" : "1",
"birthday" : 401280850089
}
还有 POJO 类:
public class FbProfile {
long id;
@JsonDeserialize(using = LocalDateDeserializer.class)
LocalDate birthday;
}
我正在使用 Jackson 进行反序列化:
public FbProfile loadFbProfile(File file) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
FbProfile profile = mapper.readValue(file, FbProfile.class);
return profile;
}
但它会抛出异常:
com.fasterxml.jackson.databind.JsonMappingException:意外的令牌 (VALUE_NUMBER_INT),预期 VALUE_STRING:预期数组或字符串。
如何将纪元反序列化为LocalDate?我想补充一点,如果我将数据类型从 LocalDate 更改为 java.util.Date 它工作得很好。所以也许最好反序列化为java.util.Date 并创建getter 和setter,它们将执行与LocalDate 之间的转换。
【问题讨论】:
-
请注意,将毫秒转换为日期取决于时区。例如,您示例中的数字等于 1982-09-19T10:54:10.089Z,而后者又等于 1982-09-18T23:54:10.089-11:00[Pacific/Midway]。
-
避免使用老式的
Date类。它给你的唯一一件事是现代课程没有给你带来麻烦。如果您想尝试LocalDate以外的其他课程,Instant是显而易见的选择。 -
您在询问之前是否进行了搜索?我想你可能会在this question: Java 8 LocalDate Jackson format 中找到一些灵感。
-
@Ole V.V.是的,我搜索过。我找到了注释
@JsonDeserialize(using = LocalDateDeserializer.class),但它不适用于时代。不过还是谢谢你的提示。
标签: java json jackson epoch localdate