首页 > 编程语言 >JAVA踩坑日记之超隐蔽但常见空指针问题

JAVA踩坑日记之超隐蔽但常见空指针问题

时间:2024-06-06 22:34:16浏览次数:17  
标签:JAVA 之超 bookId findBookDetailById BookDetailDto Objects bookDetail 指针 metaData

今天遇到一个特别难以发现的空指针问题

代码如下:

        BookDetailDto bookDetail = metaDataDetailDao.findBookDetailById(bookId);
        if (null == bookDetail) {
            bookDetail = metaDataTempDao.findBookDetailById(bookId);
        }
        // 如果简介为空,去meta data查
        if (Objects.isNull(bookDetail) || StringUtils.isBlank(bookDetail.getMetaDescription())) {
            MetaData metaData = metaDataDao.selectById(bookId);
            if (Objects.nonNull(metaData)) {
                bookDetail.setMetaDescription(metaData.getIntroduction());
            }
        }
        return bookDetail;

怎么样,看起来是不是没什么问题,还进行了空指针的判断!!!

但是当两次数据库都没有查数据时,bookDetail就会为空,在bookDetail.setMetaDescription(metaData.getIntroduction());时就会出现空指针异常

即使是在第一行BookDetailDto bookDetail = new BookDetailDto();也不行.

至于为什么我猜想是数据库查询查不到时会把对象置空,所以在用的时候重新声明下就可以了

BookDetailDto bookDetail = metaDataDetailDao.findBookDetailById(bookId);
        if (null == bookDetail) {
            bookDetail = metaDataTempDao.findBookDetailById(bookId);
        }
        // 如果简介为空,去meta data查
        MetaData metaData = metaDataDao.selectById(bookId);
        if (Objects.isNull(bookDetail)) {
            bookDetail = new BookDetailDto();
        }
        if (StringUtils.isBlank(bookDetail.getMetaDescription())) {
            if (Objects.nonNull(metaData)) {
                bookDetail.setMetaDescription(metaData.getIntroduction());
            }
        }
        return bookDetail;

标签:JAVA,之超,bookId,findBookDetailById,BookDetailDto,Objects,bookDetail,指针,metaData
From: https://blog.csdn.net/qq_44922250/article/details/139511173

相关文章

  • 有关于JavaSSM项目的前期框架准备
    一、项目准备的工具及框架使用工具:idea创建工程:maven工程使用框架:ssm(spring+springmvc+mybatis)服务器:tomcat二、项目前期内容1、pom.xml导入所依赖的jar包(这里附上代码)<dependencies><!--扫入spring相关依赖--><dependency><group......
  • java后端开发学习路径
    java后端开发学习路径阶段一:Java基础(入门)学习内容:基本语法:变量、数据类型、运算符、控制流、函数等。面向对象编程:类、对象、继承、多态、封装等。常用类库:String、集合框架(List,Set,Map)、IO、多线程等。推荐资源:《Java核心技术卷一》:https://www.am......
  • 【Java】static 修饰变量
    static一种java内置关键字,静态关键字,可以修饰成员变量、成员方法。static+成员变量1.static+成员变量2.类变量图解3.类变量的访问4.类变量的内存原理5.类变量的应用1.static+成员变量成员变量按照有无static修饰,可以分为类变量:static+变量,属于类,仅存一......
  • Spire.PDF for Java 10.6.0 支持 PDF to SVG, Word and OFD
    Spire.PDFforJava10.6.0enhancestheconversionsfromPDFtoSVG,WordandOFDSpire.DocforJavaisaprofessionalWordAPIthatempowersJavaapplicationstocreate,convert,manipulateandprintWorddocumentswithoutdependencyonMicrosoftWord.B......
  • 什么是Web应用--以JavaWeb为例
    Web应用(WebApplication)是指通过Web浏览器访问的应用程序。与传统的桌面应用不同,Web应用运行在服务器上,通过网络传输数据,并在客户端浏览器中显示和操作。这种架构具有跨平台、易于更新和维护等优势。Web服务器的作用Web服务器在Web应用中扮演着重要角色,主要功能包括:接收......
  • java后端开发学习路径
    java后端开发学习路径阶段一:Java基础(入门)学习内容:基本语法:变量、数据类型、运算符、控制流、函数等。面向对象编程:类、对象、继承、多态、封装等。常用类库:String、集合框架(List,Set,Map)、IO、多线程等。推荐资源:《Java核心技术卷一》:https://www.am......
  • 微前端学习笔记(3):前端沙箱之JavaScript的sandbox(沙盒/沙箱)
    sandboxSandbox(沙盒/沙箱)的主要目的是为了安全性,以防止恶意代码或者不受信任的脚本访问敏感资源或干扰其他应用程序的执行。通过在沙盒环境中运行,可以确保代码的行为被限制在一个安全的范围内,防止其超出预期权限进行操作。沙箱(Sandbox)是一种安全机制,目的是让程序运行在一个相对......
  • JavaWeb_SpringBootWeb案例
    环境搭建:开发规范接口风格-Restful:统一响应结果-Result:开发流程:        第一步应该根据需求定义表结构和定义接口文档注意:    本文代码从上往下一直添加功能,后面的模块下的代码包括前面的模块,并不是某个模块中的代码只有当前功能。部门管理查......
  • Java动态获取实现类 Class.forName(clazz).newInstance()和applicationContext.getBea
    Java动态获取实现类Class.forName(clazz).newInstance()和applicationContext.getBean,beanMap寻找方式,JavaMap定义和初始化方法1.定义枚举类MyServiceTypeEnum.javapackagecom.example.core.mydemo.bean;publicenumMyServiceTypeEnum{SUBMIT_ORDER_SUCCESS("s......
  • 【网络安全的神秘世界】JavaScript
    ......