背景
新上线了一个需求后,发现时不时的有一些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;