杰克逊:忽略@JsonIgnoreProperties 注释

Jackson: ignore the @JsonIgnoreProperties annotation

我有一个要序列化的 class,我在 class 级别使用 @JsonIgnoreProperties 从中排除一些字段。

最近我有一个需要序列化这些字段的用例。

有没有办法让 writer/reader 忽略注释?

我正在调查 @JsonView,但似乎 @JsonIgnoreProperties 优先于它。

@JsonFilter 在这种情况下可以为您提供帮助。

通过定义自定义 json 过滤器,Jackson 将动态解析给定 class 使用的过滤器,动态地允许每次调用重新配置过滤。

您可以找到详细的解释和用法示例here

您找到的一些关于动态无视的有用信息here

我想出了一个解决方案,不知道它是否是最好的,但完成了工作...

我最终使用了@JsonView。

所以我有 2 个这样的观点:

public class Views {
    public  static class Public { }
    public  static class Extended extends Public { }
}

并且默认 Spring 映射器配置为

  mapper.setConfig(mapper.getSerializationConfig().withView(Views.Public.class));
  mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);

而 class 看起来像

 public class Foo{
        String name;
        @JsonView(Views.Extended.class)
        String title;
...}

通过在对象映射器上设置默认视图,它会导致它忽略所有其他未指定的视图。没有注释的字段将始终按照配置进行序列化。

然后,当我需要对整个 class 进行序列化时,我使用:

objectMapper.writer().withView(Views.Extended.class).writeValueAsString(value);