非空注解@NonNull与@NotNull使用错误导致传参为空时报NPE

简介: 非空注解@NonNull与@NotNull使用错误导致传参为空时报NPE

背景

新上线了一个需求后,发现时不时的有一些NullPointerException报出来,跟踪后发现都是在一个地方报出来的


org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.lingyejun.mall.domain.book.req.BookInfoReqDto]: Constructor threw exception; nested exception is java.lang.NullPointerException: bookId


根据错误的堆栈信息,找到对应的类,第一眼没有返现什么问题,但是错误是由于构造方法内部报出来的,所以我们查看编译后的.class文件,发现这个类的构造方法,居然是参数为空就直接抛出


NullPointerException


public BookInfoReqDto(@NonNull Long bookId){
    if(bookId == null){
        throw new NullPointerException("bookId");
    }else {
        this.bookId = bookId;
    }
}


原来是有人用错注解了


@NonNull使用错注解了,应该用@NotNull,注意二者所源自的包是不同的。


import lombok.NonNull;import javax.validation.constraints.NotNull;


本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。


目录
相关文章
|
Java 数据库连接 mybatis
【Spring常见错误】No qualifying bean of type
📋📋 精彩摘要:MyBatis 核心配置文件(xxxConfig.xml),该文件配置了MyBatis的一些全局信息,,包含数据库连接信息和MyBatis运行时所需的各种特性,以及设置和响应MyBatis行为的一些属性。本文将深入浅出的介绍MyBatis核心配置文件中常用的标签配置。
7290 0
|
SQL Web App开发 Java
java.sql.SQLException: Unsupported character encoding 'utf8mb4'.
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/76199827 四月 12, 2017 3:47:52 下午 org.
5467 0
element el-cascader动态编辑赋值后,不回显的解决方法(整理)
element el-cascader动态编辑赋值后,不回显的解决方法(整理)
|
存储 前端开发 Java
Springboot静态资源映射及文件映射
在Spring Boot项目中,为了解决前端访问后端存储的图片问题,起初尝试通过静态资源映射实现,但发现这种方式仅能访问打包时已存在的文件。对于动态上传的图片(如头像),需采用资源映射配置,将特定路径映射到服务器上的文件夹,确保新上传的图片能即时访问。例如,通过`addResourceHandler("/img/**").addResourceLocations("file:E:\\myProject\\forum_server\\")`配置,使前端可通过URL直接访问图片。
986 0
Springboot静态资源映射及文件映射
|
Java API 数据安全/隐私保护
访问修饰符 public private protected 及默认情况的区别解析
在Java编程中,访问修饰符(`public`、`private`、`protected`和默认)用于控制类、方法、字段及构造函数的访问范围。`public`允许所有类访问;`private`仅限类内部访问;`protected`允许同一包内或子类访问;默认(无修饰符)仅限同一包内访问。通过合理使用这些修饰符,可实现数据封装、提高安全性和代码可维护性。了解它们的区别与应用场景,是掌握Java面向对象编程的关键。
2272 6
|
缓存 安全 Java
【Java并发】【ConcurrentHashMap】适合初学体质的ConcurrentHashMap入门
ConcurrentHashMap是Java中线程安全的哈希表实现,支持高并发读写操作。相比Hashtable,它通过分段锁(JDK1.7)或CAS+synchronized(JDK1.8)实现更细粒度锁控制,提升性能与安全性。本文详细介绍其构造方法、添加/获取/删除元素等常用操作,并对比JDK1.7和1.8的区别,帮助开发者深入理解与使用ConcurrentHashMap。欢迎关注,了解更多!
1258 5
【Java并发】【ConcurrentHashMap】适合初学体质的ConcurrentHashMap入门
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
2784 6
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
lombok的使用
本文介绍了Lombok库的基本使用方法和常用注解,通过示例代码展示了如何使用Lombok简化Java对象的创建、属性访问、日志记录等编码工作,使代码更加简洁。
lombok的使用
|
安全 Java 测试技术
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
1902 10
|
JSON 安全 Java
Spring Boot之全局异常处理:404异常为何捕获不到?
Spring Boot之全局异常处理:404异常为何捕获不到?
2785 0
Spring Boot之全局异常处理:404异常为何捕获不到?