Java代码何时进行判空校验

前言

我们在写代码的时候最需要关注的是入参和出参。需要对入参和数据库返回值进行判空校验。

一、入参校验?

入参分为两种:
(1)必传字段:只需要在代码层面做判断,不需要在sql层面做判断
a.单个字段,我们可以在参数的前面加上@NotNull。或者在代码中进行参数为空的校验,返回值一般是跟方法的返回值保持一致,也可以直接抛异常。
b.实体类,我们可以在参数前面加上@NotNull,表示这个前端传的实体类不为空。这时候我们可以在自定义的实体类中加上@NotNull(message=" ")注解,或者在代码中对这个实体类的某些字段进行判空校验。
在这里插入图片描述
(2)非必传字段:在代码层面不需要做判空校验,只需要在sql层面做判断
以下sql中:activityId是必传字段,periodStage是非必传字段

select
coupon_id
from eiop_act_rel_coupon
where del_flag=0
and activity_id=#{activityId}

and Remark6=#{periodStage}

order by activity_coupon_id

二、数据库返回值的校验

对数据库返回值进行处理时要小心,不同的返回值类型将导致不同的空值校验逻辑
查询结果分为两种:集合(List和Set)和其他的对象类型
对List,Set集合要进行(值.size)的校验。
对Map与普通对象类型,返回值先进行isNull校验,再进行(值.size)的校验(因为即使Map等类型不为null也很可能为:“空集合”),并且Map等类型不能直接进行(值.size)校验,因此才能保证此处校验不至于出现空指针异常bug.

1.返回值结果为List<泛型类型无所谓>,set<泛型类型无所谓>时

此时的sql语句无结果时的返回值将是一个空集合,类似:[ ]这种类型。此时无需对返回结果进行任何校验,因为返回值是一个空集合,遍历空集合时,遍历内逻辑将不会执行。同时不会出现空指针异常bug。
并且对设定为List与Set类型的返回值进行空指针校验是无意义的。
也就是说:
List test=iMapper.getTestDemo(param);
if(test==null){//逻辑代码}
这种校验没有意义,test值永远不为null,逻辑代码永远不会被执行;要对List,Set类型返回结果进行是否为空值校验,必须校验他们的size大小,当size=0时,查询结果为空。
list集合要进行判断:
if(!CollectionUtils.isEmpty())
这样的话如果条件不成立,字段为null
前端判断这个字段没有值,就不用get这个字段了,减少了前端的工作量。

2.当返回值为Map,对象类型,String类型时

此时sql语句查询无结果时将返回null值,此时若直接对Map进行遍历操作便会出现空指针异常bug,因此必须对该返回结果进行是null的校验。
Map<String,String> test=iMapper.getTestDemo(id);
if(test==null)
return ;
//此时内逻辑将可能执行

总结

判空:—最好使用对应的工具类进行判空操作
(1)空字符串
str !=null && str !=" "
StringUtils.isNotBlank(str)
(2)对象
actInfo !=null
ObjectUtils.isNotEmpty()
!ObjectUtils.isEmpty();
(3)集合
actInfoList !=null && actInfoList.size()>0
CollectionUtils.isNotEmpty()
!CollectionUtils.isEmpty()

非空校验
返回格式:按方法的返回值格式
如果方法没有返回值(void)
throw new RuntimeException(“activityId can not be empty!”)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值