首页 > 解决方案 > 使用 Jackson 的 ObjectMapper 反序列化集合时如何省略空元素

问题描述

我正在尝试配置我的 ObjectMapper,以便在读取序列化值时它总是跳过集合中的空元素。我知道您可以在元素上省略 null 属性,但是如果元素本身为 null,我很难找出如何执行此操作。

我希望在 ObjectMapper 本身上全局强制执行此行为,而不是在带有注释的数据对象上强制执行,因此该行为在我的整个应用程序中是一致的。

这是一个简单的测试来解释我想要更好地实现的目标:

@Test
public void givenNullElementInCollection_whenDeserializing_thenResultShouldNotContainNulls()
        throws Exception
{
    //NON_NULL will only skip null properties for a given element, not null elements themselves
    ObjectMapper objectMapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
    String serializedCollectionWithNullElement = "[null, \"someValidElement\"]";

    List<String> deserializedList = objectMapper.readValue(serializedCollectionWithNullElement,
                                                           new TypeReference<>()
                                                           {
                                                           });

    assertThat(deserializedList.contains(null), is(false)); //Fails, I want to configure my ObjectMapper so it passes
}

同样,带有“[null]”的序列化 json 应该产生一个空列表,而带有“[”a”, null, “b”, “c”, null, null]” 的序列化 json 应该产生一个带有3 个元素,“a、b、c”。

标签: javajsonserializationjackson

解决方案


推荐阅读