我能以某种方式改变ObjectMapper以能够处理空值和空值吗?
假设我的值读作
objectMapper.readValue(val, new TypeReference<Object>() {});
其中瓦尔为
val = new ByteArrayInputStream(new byte[] {});
我无法控制传递的值,也无法在执行readValue
之前检查缓冲区长度。
我尝试过使用DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT
配置Map器,例如:
mapper.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true);
但是我还是得到了com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
错误。有没有可能以某种方式让Jackson忽略空值而只返回null?
1条答案
按热度按时间lnxxn5zx1#
有没有可能让Jackson忽略空值而只返回null?
通过使用更低级的流API,可以成功地使用空字节数组或空输入流进行拨号。
这就是在将数据输入到
ObjectMapper
之前,如何通过使用JsonParser
来确保有一些数据需要解析的核心思想:因此,我们将输入解析为
JsonNode
,并手动检查它,只有当它不为空时,ObjectMapper
才起作用。如果我们把这个逻辑提取到一个单独的方法中,它可能看起来像这样(Java 8
Optional
在这种情况下可能是一个方便的返回类型):用法示例
考虑一个简单的POJO:
main()