我有一个异常类:
@NoArgsConstructor
public class ProductsException extends RuntimeException {
private MyError error;
public ProductsException(Exception e) {
super(e);
}
}
public class MyError {
private final String errorCode;
private final String message;
private final String moreInfo;
private final List<Errors> errors;
public MyError(String errorCode, String message, String moreInfo, List<Errors> errors) {
this.errorCode = errorCode;
this.message = message;
this.moreInfo = moreInfo;
this.errors = errors;
}
此异常是从服务类内部引发的,但我的客户端预期异常为:
{
"personId" : "1",
"code" : "1",
"debugger" : "[
//List
]"
}
所以我创建了一个新类
@Builder
public class CustomException extends ProductsException {
private final String personId;
private final String code;
private final List<String> debugger;
}
在控制器中:
catch(ProductsException e) {
throw CustomException.builder()
.code(e.getErrorCode())
.debugger(List.of(e.getError().getMessage()))
.build();
}
这似乎不起作用,我得到了未捕获的异常。我怀疑我需要在构造函数中传递这些字段,但不确定确切需要做什么。
即使我执行public class CustomException extends RuntimeException
,我如何将所有这些字段传递给super()
?
任何帮助都将不胜感激。
1条答案
按热度按时间b09cbbtk1#
您不能将附加字段传递给超类。相反,您的类必须自己管理它们。例如:
更改getMessage()以根据您的需要格式化消息。或者添加getter函数,以便其他代码部分可以根据需要接管格式化,例如,您的客户的格式化与日志文件的格式化不同。
我不知道为什么你会遇到未捕获的异常。在你的try/catch块中可能缺少一些东西,但是你显示的是你抛出的地方,而不是你捕获的地方。