Jackson反序列化中碰到的空字符串问题

好久没有写文章了, 把最近碰到的问题补上! 以后要尽量坚持定期更新!

最近在使用第三方的开放平台时, 发现返回的数据使用Jackson反序列化为java对象, 老是会报错.

仔细查看了一下返回数据之后, 发现返回的数据中有很多字段, 在有值的时候, 是一串字符串, 但是, 没有值的时候, 返回的是一个空数组. 如下所示:

data:"xxx"
data:[

]

这种情况下, 定义java对象的时候, 不管是用String还是String[]都有可能反序列化失败.

那怎么办呢, 难道要用Object来反序列化吗? 但是这样的话, 再处理起来, 又会很麻烦. 最好的还是能用String或者String[]来处理两种情况.

好在ObjectMapper提供了各种可供配置的选项, 于是跑去好好研究了一下, 发现在DeserializationFeature里面有可选配置项ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECTACCEPT_SINGLE_VALUE_AS_ARRAY. 这两个参数应该刚好能解决上面对应的问题. 对于我来说, 使用String更加方便, 所以就使用了ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT.

ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT);

改完之后测试, 反序列化正常.

参考: Jackson Mapping List of String or simple String

发表评论

电子邮件地址不会被公开。 必填项已用*标注