使用jackson忽略某些字段反序列化而不更改模型

时间:2018-04-17 10:07:08

标签: java jackson

我正在寻找一种配置jackson反序列化器以忽略某些字段的方法。我不想通过注释模型来实现这一点,因为它是由另一个项目给出的;我只是想通过构造反序列化器(ObjectMapper)来做到这一点 有可能吗?

2 个答案:

答案 0 :(得分:1)

你必须做以下

1)编写自己的Deserializer,扩展JsonDeserializer

2)覆盖deserialize方法并在忽略某些字段后返回您的类对象

3)使用ObjectMapper注册反序列化器

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(yourClass.class, new yourDerializer());
mapper.registerModule(module);
String newJsonString = "{\"id\":1}";
final yourClass yourClassObject= mapper.readValue(newJsonString, yourClass.class);

希望这能解决您的问题

答案 1 :(得分:1)

您可以使用Mix-In注释来实现此目的。

class ThirdPartyReadOnlyClass {
   private String ignoredPropertyFromThirdParty;

   public String getIgnoredPropertyFromThirdParty() {
      return ignoredPropertyFromThirdParty;
   }
}

abstract class MixIn {
  @JsonIgnore
  String getIgnoredPropertyFromThirdParty();
}

您可以将Json注释放在MixIn类上,就像将它们放在原始模型类上一样。

配置对象映射器

objectMapper.addMixInAnnotations(ThirdPartyReadOnlyClass.class, MixIn.class);