【问题标题】:Jackson Deserializer for one custom field?一个自定义字段的杰克逊反序列化器?
【发布时间】:2017-04-21 10:37:28
【问题描述】:

我相信我们需要一个自定义的反序列化器来对我们班级的一个字段做一些特定的事情。一旦我这样做,我现在负责反序列化所有其他字段。有没有办法让杰克逊反序列化所有字段除了我在这里关心的那个?

public class ThingDeseralizer extends StdDeserializer<Thing> {
    @Override
    public Thing deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        ObjectCodec oc = p.getCodec();
        JsonNode node = oc.readTree(p);

        String special = node.get("special").asText();

        Thing thing = new Thing()
        thing.doSomethignWithSpecial(special)
        return thing;
    }
}

感谢

【问题讨论】:

  • 对象是可变的吗?

标签: json jackson deserialization


【解决方案1】:

在 POJO 中的字段上添加 @JsonDeserialize(using = ThingDeseralizer.class) 注释。

这将告诉 Jackson 如何反序列化该特定字段,其余所有将按默认设置。

【讨论】:

  • 是的,我刚刚发现了这一点。假设地说,有没有办法在课堂上使用单个反序列化器来做到这一点?我想在超类上必须有一些方法,或者要扩展一个不同的类,这将填写所有内容并让我覆盖我想要的内容。
  • 你的意思是对整个班级使用反序列化器?比你说的你必须定义所有字段。但这也很容易,请查看以下答案:link
  • 该链接中的相关部分是什么?
  • @hvgotcodes 对于序列化,JsonSerializable 接口会这样做,但不幸的是反序列化没有类似的支持——这是由于难以定义合适的 API:在序列化期间已经有一个实例可以调用方法打开,但反序列化不是这种情况。
  • @hvgotcodes 用于序列化整个 Item 类的自定义 ItemSerializer 类。序列化整数、字符串等很容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 2012-08-16
相关资源
最近更新 更多