如何告诉 Jackson 忽略我无法控制源代码的属性?

2022-08-31 07:47:35

长话短说,我的一个实体有一个GeometryCollection,当你调用“getBoundary”时会抛出一个异常(为什么这是另一本书,现在让我们说这是它的工作方式)。

有没有办法告诉杰克逊不要包括那个特定的getter?我知道我可以在拥有/控制代码时使用@JacksonIgnore。但事实并非如此,Jackson 通过父对象的连续序列化最终到达了这一点。我在杰克逊文档中看到一个过滤选项。这是一个合理的解决方案吗?

谢谢!


答案 1

您可以使用Jackson Mixins。例如:

class YourClass {
  public int ignoreThis() { return 0; }    
}

有了这个 Mixin

abstract class MixIn {
  @JsonIgnore abstract int ignoreThis(); // we don't need it!  
}

有了这个:

objectMapper.getSerializationConfig().addMixInAnnotations(YourClass.class, MixIn.class);

编辑:

感谢评论,使用Jackson 2.5 +,API已更改,应该调用objectMapper.addMixIn(Class<?> target, Class<?> mixinSource)


答案 2

另一种可能性是,如果要忽略所有未知属性,可以按如下方式配置映射器:

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);