堆栈跟踪中包含 Lombok 生成器的异常
Exception with Lombok builder included in stacktrace
代码使用 lombok 生成器抛出异常:
throw MyException.builder().error(ErrorCode.GeneralError).message(error).build();
Stacktrace 将异常的根源显示为生成器方法 (@Builder
)
com.MyException
at com.MyException$MyExceptionBuilder.build(MyException.java:9)
...
builder 添加到 stacktrace 不是 lombok issue 吗?
异常Class:
@Builder
public class MyException extends Exception {
private static final long serialVersionUID = -7842978360324381658L;
ErrorCode error;
RequestVO request;
ResponseVO response;
String message;
确实是个很有意思的问题,让我一度疑惑。解决方法如下:
The stack trace is filled in at the point of the exception’s constructor.
如果您不手动调用fillInStackTrace()
,那么Java会在您调用new
的地方填写。 (好吧,JVM 将始终填充它,但它可以被覆盖。)现在 您的 MyException
构造函数究竟在哪里 被调用了?是的,在您的构建器的 build()
函数中。 Et voilà,这就是您将在堆栈跟踪中看到的内容。
代码使用 lombok 生成器抛出异常:
throw MyException.builder().error(ErrorCode.GeneralError).message(error).build();
Stacktrace 将异常的根源显示为生成器方法 (@Builder
)
com.MyException
at com.MyException$MyExceptionBuilder.build(MyException.java:9)
...
builder 添加到 stacktrace 不是 lombok issue 吗?
异常Class:
@Builder
public class MyException extends Exception {
private static final long serialVersionUID = -7842978360324381658L;
ErrorCode error;
RequestVO request;
ResponseVO response;
String message;
确实是个很有意思的问题,让我一度疑惑。解决方法如下:
The stack trace is filled in at the point of the exception’s constructor.
如果您不手动调用fillInStackTrace()
,那么Java会在您调用new
的地方填写。 (好吧,JVM 将始终填充它,但它可以被覆盖。)现在 您的 MyException
构造函数究竟在哪里 被调用了?是的,在您的构建器的 build()
函数中。 Et voilà,这就是您将在堆栈跟踪中看到的内容。