记录:springboot使用resultType空指针java.lang.NullPointerException: null...【亲测有效】

简介: 记录:springboot使用resultType空指针java.lang.NullPointerException: null...【亲测有效】

一、前言🔥


      哈喽,小伙伴们,我是bug菌呀👀,不知不觉就一年又4月,正是踏青郊游的好时节。可上海疫情,除了在家远程办公就是看点技术顺便卷点文章。这不是4月又出了更文活动,逼自己一把,坚持每天做点内容输出,养成写作习惯,将来你会回来感谢曾经的自己坚持了一把才有此刻的辉煌成就。

      小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,掘金不停💕,加油☘️


二、版本说明🔥


环境:springboot2.3.1.REALSE + jdk1.8 + mysql5.6


三、报错详情🔥


      又是找bug的一天,非常之离谱!又是给同事排错,虽然对于我而言,其实排错无非就是debug,但是业务逻辑不清楚的地方,对自己而言还得盯人家写的理一遍,多耽误事儿呀!但是总不能放任报错不管吧,能咋办,改bug呗!

      此处控制台是直接空指针,一般就是返回集合或对象为空,但你没有进行验空就直接使用它来获取里头的元素或属性就会报空指针。

      所以具体问题咋哪儿呢?其实就只需要看控制台打印的报错位于哪里,去那里degue看一眼,其实八九不离十就按我说的思路排一遍就清楚了。


如下是具体控制台报错截图:


四、报错分析🔥


      我们看报错显示在ChartsServiceImpl.java文件的第437行,我们直接打开这个文件,去看这块代码,437行是一个map.put()的过程,如果这行代码导致报错,那必然是pg.getProfessionalGroupName()这里获取属性报错!我们再看pg是遍历professionalGroups集合的一个对象,那就说明,这个对象里头的professionalGroupName为null,才会导致获取报空。


网络异常,图片无法展示
|


      可以看一下,确实是因为pg对象为null,获取其professionalGroupName属性而报错。


网络异常,图片无法展示
|


      为了验证我的猜测,我打算直接本地debug断点在获取professionalGroups

合这一行,看看professionalGroups集合里头装的到底是什么?


网络异常,图片无法展示
|


      好家伙,大家请看,果不其然,professionalGroups``(ArrayList),其size = 2,但具体显示All elements are null



      一般情况都是直接展示具体对象值,但是这里却展示All elements are null,那我们来分析一下为何会产生All elements are null问题,首先我们都知道List是允许插入空值,然后,mybtis映射到List有空值。那么Mybatis映射到List有空值,就有可能是以下情况了

  • sql语句映射有问题,
  • 可能sql本身产生了一条为null的记录。

我们继续排查,检查一下这个方法所执行的源sql。大家请看,首先sql语法是没问题的。


网络异常,图片无法展示
|


      返回类型是个对象,且使用的是resultType,我们都知道使用resultType指定返回对象pojo,其必定要求sql返回字段名的驼峰命名要与你指定的pojo属性要一致,否则是无法映射上该字段的。


      所以我们直接打开该FindByProfessionalGroupTopFiveVo对象看一眼,一切就会真相大白了!好家伙,果然是驼峰命名不一致,sql没有指定别名,所以转驼峰是professionalGroup,而vo中所定义的属性名又为professionalGroupName


网络异常,图片无法展示
|


所以,推理到这里,小伙伴们都知道应该怎么改了么?


五、解决方案🔥



为解决映射关系,以下我提供的三种解决方案,仅供参考。


1️⃣方案一:


只修改vo,将FindByProfessionalGroupTopFiveVo对象中的professionalGroupName属性名改成professionalGroup

具体演示请看如下:

网络异常,图片无法展示
|


2️⃣方案二:


只修改源sql,将professional_group 进行别名,指定名称为professionalGroupName即可。

具体演示请看如下:


3️⃣方案三:


使用resultMap进行指定返回类型,然后定义一个resultMap,其中指定一下映射名。

具体演示请看如下:

网络异常,图片无法展示
|


... ...

      ok,以上这样就好啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~


六、往期推荐🔥



七、文末🔥


      如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《SpringBoot零基础入门》,从无到有,从零到一!希望能帮到大家。

      我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!


目录
相关文章
|
5天前
|
小程序 数据可视化 Java
Java+后端Spring boot 开发的全套UWB定位方案,0.1米高精度定位系统源码
UWB定位系统由硬件定位设备、定位引擎和应用软件组成。该定位系统应用软件支持PC端和移动端访问,并提供位置实时显示、历史轨迹回放、人员考勤、电子围栏、行为分析、智能巡检等功能。定位精度高达10cm,同时具备高动态、高容量、低功耗的优点。应用场景包括:隧道、化工、工厂、煤矿、工地、电厂、养老、展馆、整车、机房、机场等。
30 8
|
1天前
|
安全 算法 Java
Java8实战-用Optional取代null
Java8实战-用Optional取代null
4 0
|
1天前
|
监控 Java 关系型数据库
java版MES系统源码,后端采用 Spring Boot 多模块架构
MES系统采用Vue3的vue-element-plus-admin为后台,Spring Boot多模块架构,支持MySQL、Oracle等数据库,具备SaaS多租户功能。核心功能包括车间计划排程、工艺流程配置、生产质量管理、进度追踪、库存和排班管理等,全面覆盖生产运营关键环节。
java版MES系统源码,后端采用 Spring Boot 多模块架构
|
3天前
|
Web App开发 分布式计算 大数据
MaxCompute操作报错合集之配置归并节点,出现java.lang.NullPointerException: null错误提示,该怎么办
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
3天前
|
Java
Java中判断String类型为空和null的方法
Java中判断`String`变量是否为空或`null`需用`== null`和`.isEmpty()`。示例代码提供两种方法:`main`方法直接判断,`safeGetString`方法提供默认值。当输入为`null`或空时,返回默认值。代码包含三个测试案例,分别处理`null`、空字符串和非空非`null`字符串。
18 0
|
5天前
|
监控 数据管理 Java
智慧城管源码,基于微服务+java+springboot+vue+uniapp开发的城管综合执法系统源码
智慧城管执法系统利用微服务和Java技术提升城市管理水平,涵盖事件处理、投诉、处罚等功能,包含PC和APP源码。系统支持执法APP,便于领导随时随地审批,具备文书模板、地图定位、法规查询等功能。此外,执法办案系统通过监控视频分析事件,实现案件全程闭环管理,包括组织、案件、信用和执法队伍管理,以及法规库等基础支撑。系统旨在优化流程,提高数据管理和效率。
智慧城管源码,基于微服务+java+springboot+vue+uniapp开发的城管综合执法系统源码
|
5天前
|
监控 Java jenkins
为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
当然 Spring Boot Actuator 虽然可以监控一个 Spring Boot 应用的健康情况,实际上现在的系统都是需要很多的服务相互配合来完成工作,如何通过一个监控软件来监控所以的 Spring Boot 项目将变得比较紧迫。
28 5
|
6天前
|
Java Spring
解决Springboot集成ElasticSearch 报错:A bean with that name has already been defined in null and overriding
解决Springboot集成ElasticSearch 报错:A bean with that name has already been defined in null and overriding
|
6天前
|
Prometheus 监控 安全
Java一分钟之-Spring Boot Actuator:健康检查与监控
【6月更文挑战第7天】Spring Boot Actuator 提供了丰富的监控和管理端点,如健康检查、性能监控。要启用Actuator,需添加依赖并配置暴露端点。健康检查可自定义,性能监控可通过Metrics结合Micrometer集成外部系统。安全配置很重要,可以使用Spring Security保护端点。日志和环境信息管理则可通过`/loggers`和`/env`端点。正确使用Actuator能提升应用的可观察性和维护性。
18 1
|
6天前
|
监控 Java 数据库连接
Java一分钟之-Spring Boot:快速开发微服务
【6月更文挑战第7天】本文探讨了Spring Boot开发中的常见问题,包括起步依赖与版本管理、自动配置、启动类位置、日志配置、数据库连接、错误处理和Actuator监控。建议使用最新稳定版Spring Boot,通过`spring-boot-starter-parent`管理版本,理解自动配置原理,正确放置启动类,配置日志级别,准确设置数据库连接参数,自定义全局异常处理器,以及启用Actuator进行监控。不断学习和实践是应对各种问题的关键。
22 1