【SpringBoot】Java中isEmpty使用不当报错空指针

业务场景:

查询区域列表接口,为了提高接口TPS,选择将列表数据加入缓存。

1、请求该接口时,首先查询redis,如果redis不为空,则获取redis中key对应的value值,转换为特定结构返回前端。

2、如果redis为空,则查询数据库,再将所查询到的数据存入redis,设置过期时间。

问题描述:

然而请求进来查询redis时,redis没有对应key值,按逻辑来讲应该查询数据库,而不是直接报错空指针。

解决:

更换为StringUtils.isEmpty()方法进行校验。

总结:

是因为在判断redis中是否存在对应数据时使用了,if (stringDataKey.isEmpty()) 来进行校验是否为空,但是在使用isEmpty时前提是stringDataKey字符串本身不能为null,没有 "null.isEmpty()"这个方法,导致了空指针。

随后更换为StringUtils.isEmpty(stringDataKey)解决。它一般会先去检查传入的参数是否为 null,如果是 null,直接就判定为空(符合我们对于 "空" 的一种常规理解,也就是没有值嘛),然后返回 true;如果参数不为 null,才会进一步去看这个字符串的长度是不是等于 0,综合这两种情况(null 或者长度为 0 的字符串)来确定是否为空字符串,这样无论传入的 stringDataKeynull 还是实实在在的空字符串,都能正确地进行判断,避免了出现空指针异常的情况

相关推荐
菜菜小狗的学习笔记6 分钟前
八股(三)Java并发
java·开发语言
云烟成雨TD11 分钟前
Spring AI Alibaba 1.x 系列【10】ReactAgent 工具加载和执行流程
java·人工智能·spring
lee_curry11 分钟前
JUC第一章 java中基础概念和CompletableFuture
java·多线程·并发·juc
kiku181815 分钟前
keepalived高可用与负载均衡
后端·github·lvs
Leo89917 分钟前
mysql 从零单排之MVCC
后端
GreatSQL18 分钟前
参数配置不当导致GreatSQL异步复制IO线程中断
后端
老马952724 分钟前
opencode3-我的能力超乎你的想象
人工智能·后端
迷藏49425 分钟前
**超融合架构下的Go语言实践:从零搭建高性能容器化微服务集群**在现代云原生时代,*
java·python·云原生·架构·golang
weixin_4080996733 分钟前
【企业级方案】财务自动化:OCR发票识别 + 自动录入系统完整实现(附代码与落地架构)
后端·ocr·api·发票 ocr 识别·发票自动录入系统·发票识别 api·财务自动化
それども33 分钟前
Spring Bean @Autowired自注入空指针问题
java·开发语言·spring