前言

一次处理第三方接口的JSON数据时,需要转成Object类型的属性转为字符串时,发现空对象竟然被转成了字符串类型的"null"而不是空字符串""

原因探究

通过阅读java.lang包下String.valueOf()的源码后发现,当Object对象为空时,会直接返回字符串类型的”null”:

1
(obj == null) ? "null" : obj.toString();

图片

正常情况下,这种逻辑其实也不会有问题。

但是如果这个数据是一个数字,比如:123,经过JSON转换后变成了字符串"123"

然后我们从JSON中取出后,是Object类型,又因为该数据其实是字符串,所以需要先转为String再转为Integer。

正常情况下,上面这个情况也不会有问题。

但是如果这个数字一开始就是空,那么我们从JSON中取出后,他就是null,此时我们调用String.valueOf(),它就会变成"null",这个使用再调用Integer.parseInt()方法就会报错了。

解决办法

建议在使用String.valueOf()方法前,对Object类型的数据判空,进行特殊处理,再调用该方法转为String。异或者先判空再强转。

当然也使用一些已经处理过的第三方工具类实现Object类型转为String类型。