java - 使用 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”。
解决方案
推荐阅读
- logstash - 创建自定义 GROK 模式
- excel - VBA根据单元格值更改行颜色
- solr - Hue Solr 搜索运行缓慢
- sql - sql server中基于ID的concat字符串
- scala - 比较 DF 结构数组 spark 中的值
- browser - android 默认浏览器是否支持 service worker?
- python-3.x - Visual Studio 代码上的 Python AutoIndent
- virtualization - 使用 Proxmox API 获取 CPU 型号名称
- jquery - 如何禁用 jqueryUI menu() 小部件的悬停行为并添加一个单击事件?
- wix - 如何在设置验证期间从合并的“Microsoft_VC141_CRT_x64.msm”中提取 MSVC rutime 库