JsonObject的属性与值的判空(Null值)处理方式
问题现象
之前在项目中遇到一个没有遇到过的问题,就是在使用 == null 来对jsonObject这个对象的id属性进行null值判空时会发生一个问题:
当前端不传入该属性 ({}) 时: jsonObject.get("id") == null 结果为: true
但当前端传入参数null ({"id" : null}) 时: jsonObject.get("id") == null 结果为: false
也就是说当 前端传入参数"id" 不管是否传入 null, 则 jsonObject.get("id") 就不会是 null !!!!!!
问题分析
一开始,我确实以为JsonObject的判空操作应该和一般的Object对象是一样的,在了解了一下JsonObject这个对象的配置之后,才知道:
原来JsonObject有两个判空方式:
- 第一种:在前端不传入该属性时:
通过 jsonObject.get("id") == null 进行判空
- 第二种:在前端传入参数为null值时:
通过 jsonObject.get("orgId").isJsonNull() 方法 来判空.
总结: 其实这两种情况是不同的:
- 第一种是:前端不传入该属性;
这个时候 jsonObject.get("id") 获取这个属性对象{key:value} 就是null, 因此只能用 == null 来判空!
- 第二种是:前端传入参数为null值;
这个时候 jsonObject.get("id") 可以获取这个属性对象{key:value}, 只是这个对象的value值为 null, 但 key 依然是 id, 所以这个对象不为null,因此只能用 isJsonNull() 方法 来判空
解决方法
将
if ( jsonObject.get("id") != null )
改为:
if ( jsonObject.get("id") != null && !jsonObject.get("id").isJsonNull() )
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
java中ConcurrentHashMap的读操作为什么不需要加锁
ConcurrentHashMap完全允许多个读操作并发进行,读操作并不需要加锁。所以下面这篇文章主要给大家介绍了关于java中ConcurrentHashMap的读操作为什么不需要加锁的相关资料,需要的朋友可以参考下2018-10-10使用fastjson中的JSONPath处理json数据的方法
这篇文章主要介绍了使用fastjson中的JSONPath处理json数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-04-04详解mybatis-plus配置找不到Mapper接口路径的坑
这篇文章主要介绍了详解mybatis-plus配置找不到Mapper接口路径的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-10-10Spring5中SpringWebContext方法过时的解决方案
这篇文章主要介绍了Spring5中SpringWebContext方法过时的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01
最新评论