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

2023-05-26 17:30:56 浏览数 (1)

背景

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

代码语言:javascript复制
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

代码语言:javascript复制
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 人点赞