java - jackson :将时代反序列化为 LocalDate

标签 java json jackson epoch localdate

我有以下 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/

相关文章:

使用 Mockito 进行 Java HttpClient 单元测试

java - webdriver sendKeys 不等待页面加载

java - 有谁知道如何更改 Spring security oauth2 中的响应错误格式?

java - 如何从 JSON 中提取图像的 url(LastFM API)

java - 从 Hibernate 反序列化 JSON

"piping"的 Java 习语

javascript - JSON 结构和返回

html - 如何将 json 数据响应从 Servlet 发送到特定的 Url(Server)?

functional-programming - 如何以非阻塞方式解析 Spring 5 WebClient 响应?

java - 如何获取 JSON 数据的多个可选值?