spring boot 全局异常处理可以通过实现 handlerexceptionresolver 接口或添加 @controlleradvice 注解的类来捕获 lombok 生成的异常。lombok 生成的代码在编译时注入,因此其抛出的异常(如 nullpointerexception)与普通 java 代码无异,只需针对具体异常类型编写处理器即可。

如何定义全局异常处理器
通过创建一个带有 @RestControllerAdvice 注解的类,并配合 @ExceptionHandler 方法,可以集中处理特定类型的异常。例如,处理 NullPointerException 时,直接在该方法中返回自定义的错误响应。

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NullPointerException.class)
public ResponseEntity<String> handleNullPointer(NullPointerException ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Caught a null pointer exception: " + ex.getMessage());
}
}上述代码定义了一个全局异常处理器,当发生 NullPointerException 时,会返回状态码为 500 的响应体。由于 Lombok 生成的 equals() 或 toString() 方法可能因字段为空而抛出此异常,该处理器能有效拦截。
如何处理 Lombok 特有的编译期异常
Lombok 本身不会在运行时抛出异常,但若配置错误或版本冲突,可能在编译阶段报错。对于运行时因 Lombok 生成逻辑导致的异常,如 EqualsBuilder 中的空指针,仍归入常规异常处理范畴。若需区分不同场景,可针对更具体的异常子类进行捕获。

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> handleRuntime(RuntimeException ex) {
if (ex.getMessage() != null && ex.getMessage().contains("lombok")) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.body("Lombok related runtime error detected.");
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Unexpected runtime error: " + ex.getMessage());
}
}此示例展示了如何通过检查异常消息内容来识别是否与 Lombok 相关,从而返回不同的 HTTP 状态码。这种方式适用于需要特别标记 Lombok 引发问题的场景。
基于 equals 方法空指针的具体问题
当使用 @Data 注解时,Lombok 会自动生成 equals() 和 hashCode() 方法。如果对象中包含可为空的字段,且未做判空处理,调用 equals() 时可能触发 NullPointerException。此时,全局异常处理器应能正确捕获并返回友好提示。


















