我有以下 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: Unexpected token (VALUE_NUMBER_INT), expected VALUE_STRING: Expected array or string.
如何将纪元反序列化为 LocalDate
?我想补充一点,如果我将数据类型从 LocalDate
更改为 java.util.Date
,它就可以正常工作。所以也许最好反序列化为 java.util.Date
并创建 getter 和 setter 来执行与 LocalDate
之间的转换。
最佳答案
我已经成功地编写了自己的反序列化器(感谢@Ole V.V. 将我指向帖子 Java 8 LocalDate Jackson format):
public class LocalDateTimeFromEpochDeserializer extends StdDeserializer<LocalDateTime> {
private static final long serialVersionUID = 1L;
protected LocalDateTimeFromEpochDeserializer() {
super(LocalDate.class);
}
@Override
public LocalDateTime deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
return Instant.ofEpochMilli(jp.readValueAs(Long.class)).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
}
关于时区的通知也很有用。谢谢!
仍然悬而未决的问题是是否可以在不编写自己的反序列化器的情况下完成?
关于java - jackson :将时代反序列化为 LocalDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44422616/