【问题标题】:Jackson ObjectMapper: How to omit (ignore) null array element [null]Jackson ObjectMapper:如何省略(忽略)空数组元素 [null]
【发布时间】:2021-03-17 15:02:47
【问题描述】:

我有一个包含null 值的 Json 数组。

{
  myArray: [ null ]
}

如何配置 Jackson ObjectMapper 以忽略此类 null 数组元素 - 就好像它是空数组 []

约束:

  • 无法控制源类 - 它是第三方类
  • 数组元素类型预先未知
  • 数组名称预先未知

【问题讨论】:

  • 我不相信杰克逊有这个开箱即用。你需要一个自定义的反序列化器。或者自己从 pojo 中剥离。
  • @SotiriosDelimanolis 你知道如何将一些后处理器插入到 ObjectMapper 中吗?
  • 不,我认为这将是一个相当复杂的过程。找到标准的列表/集合/集合和数组反序列化器,将它们包装在处理器中,然后重新注册它们以反序列化这些类型。更换服务器可能更容易????‍♂️

标签: java json jackson


【解决方案1】:

您可以使用来自JsonSetter 注释的contentNulls 属性。您的 POJO 类可能如下所示:

class ArrayWrapper {
    private List<String> myArray;

    @JsonSetter(contentNulls = Nulls.SKIP)
    public void setMyArray(List<String> myArray) {
        this.myArray = myArray;
    }

    public List<String> getMyArray() {
        return myArray;
    }
}

另见:

【讨论】:

  • 它似乎朝着正确的方向发展,但我无法修改 POJO(或几乎无法修改)。我正在寻找仅配置 ObjectMapper 本身的解决方案。
  • @MichalFoksa,使用MixIn 功能。示例:Dynamic addition of fasterxml Annotation?Jackson conditional @JsonUnwrapped
  • :( Mixin 不是通用的——它不适用于每个数组/列表。
  • @MichalFoksa,您能否编辑您的问题并添加更多详细信息?您能否创建一个 MixIn 不适用于数组/列表的示例?
【解决方案2】:

也许@JsonIclude 有效?

   @JsonInclude(value=Include.NON_EMPTY, content=Include.NON_NULL)

http://fasterxml.github.io/jackson-annotations/javadoc/2.9/com/fasterxml/jackson/annotation/JsonInclude.html?is-external=true

【讨论】:

  • 我相信这适用于字段,而不适用于 JSON 数组的内容。你试过了吗?
猜你喜欢
  • 1970-01-01
  • 2015-10-19
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
相关资源
最近更新 更多