当前位置: 首页 > 知识库问答 >
问题:

Jackson:将纪元反序列化为本地化

史意致
2023-03-14
{
      "id" : "1",
      "birthday" : 401280850089
}
public class FbProfile {
    long id;
    @JsonDeserialize(using = LocalDateDeserializer.class)
    LocalDate birthday;
}
public FbProfile loadFbProfile(File file) throws JsonParseException, JsonMappingException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    FbProfile profile = mapper.readValue(file, FbProfile.class);
    return profile;
}

但它抛出了一个异常:

JSONMappingException:意外标记(VALUE_NUMBER_INT),预期的value_string:预期的数组或字符串。

如何将epoch反序列化为localdate?我想补充一点,如果将datatype从localdate更改为java.util.date,它可以非常好地工作。因此,最好反序列化到java.util.date并创建getter和setter,它们将执行到localdate的转换。

共有1个答案

孙乐逸
2023-03-14

我已经设法编写了自己的反序列化器(谢谢@ole v.v.给我指出了Java 8 LocalDate Jackson后的格式):

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();
    }

}

关于时区的通知也很有用。谢谢!

仍然悬而未决的问题是,如果不编写自己的反序列化器,是否可以做到这一点?

 类似资料:
  • 我有一个JSON字符串,它将空列表标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到这样的字符串: 我想将其反序列化为父类,将子类正确设置为子类的空列表。 对于上面的JSON字符串,我想要一个将其id设置为13的对象,并将子元素设置为新的ArrayList 我知道如何为整个类使用注释 然后呢 但是,我想解决从字符串正确实例化列表的一般问题: 我能得到这样的东西吗?

  • 我有一个具有两个属性的JSON对象:“key”(字符串)和“value”(可以反序列化为Java bean)。 问题是,给定一个这样的物体列表,我能把它反序列化为一张地图吗? 当前使用Jackson-databind 2.1

  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 有没有一个Jackson注释允许将数组反序列化到我的POJO的特定字段中?我可以用自定义的反序列化器很容易地做到这一点,但我希望用类内联的方式来完成。 例如,我从Elasticsearch返回了以下JSON。 我的POJO如下: 我希望“排序”数组(在数组[0]中总是有一个long,在数组[1]中总是有一个String)被反序列化如下: 我发现了另一个问题,唯一的答案是自定义的反序列化器,如果可以

  • 问题内容: 考虑以下枚举和类: 并考虑以下主要功能: 当前,该主输出为: 这种输出并不适合我,因为除了字符串的,我想它是,这是序号值在枚举。 所以我想要得到的实际结果是: 有一些优雅的方法可以使其表现为这种方式吗? 问题答案: 它应该通过指定映射器来工作。 如注解的Javadoc所述,这也适用于反序列化: 注意:当用于Java枚举时,一个附加功能是带注释的方法返回的值也被视为要反序列化的值,而不仅

  • 我在试着读我的。json文件。Is是一个车辆存储类。 这是错误: com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造的实例(尽管至少存在一个Creator):无法构造的实例(尽管至少存在一个Creator):没有字符串参数构造函数/工厂方法来从[Source:(File); line: 1,列: 1]处的字符串值反序列化