非空注解@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;


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


目录
打赏
0
0
0
0
12
分享
相关文章
SpringCloud - Feign调用返回对象不为null,但属性全为null
SpringCloud - Feign调用返回对象不为null,但属性全为null
1741 0
|
4月前
如何判断`instanceof`操作符的返回值是否为`true`
`instanceof`操作符用于判断一个对象是否是指定类型或其子类型的实例。如果对象是指定类型的实例,则返回`true`,否则返回`false`。例如:`if (obj instanceof MyClass)` 会检查 `obj` 是否是 `MyClass` 类或其子类的实例。
86 3
|
10月前
|
判断不为空和不为空串的方法java
判断不为空和不为空串的方法java
自定义注解判断参数为空
使用Spring的 @Valid和@Validated不好嘛,干嘛要自己造轮子呢.......
引以为戒:避免在Set中使用未重写equals和hashCode的引用对象进行去重
在日常的Java开发中,我们经常会使用Set集合来实现去重操作,确保集合中不含有重复的元素。然而,如果使用未重写equals()和hashCode()方法的引用对象进行去重,可能会导致意外的行为,最近了在项目中就遇到了这个情况,让我们深入探讨这个问题,并引以为戒,确保正确实现去重操作。
89 0
引以为戒:避免在Set中使用未重写equals和hashCode的引用对象进行去重
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
293 0
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
介绍实体类或对象序列化时,忽略为空属性的操作(@JsonInclude(JsonInclude.Include.NON_EMPTY))注解
介绍实体类或对象序列化时,忽略为空属性的操作(@JsonInclude(JsonInclude.Include.NON_EMPTY))注解
你还在使用if来判断是否实体类或者某个属性为空吗?教你使用Assert.notNull()[断言]
你还在使用if来判断是否实体类或者某个属性为空吗?教你使用Assert.notNull()[断言]
344 1
你还在使用if来判断是否实体类或者某个属性为空吗?教你使用Assert.notNull()[断言]
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
777 0