我正在使用spring-boot 2.1.2
我正在尝试处理所有HandlerMethodArgumentResolver(常规和定制)引发的所有异常。
我的目标是处理这些异常,以便返回带有400状态代码的特定JSON。
这里的问题是,Spring对处理程序引发的异常不做任何事情(例如,捕获它们然后引发特定的异常)。
我能做的最好的事情是创建一个ExceptionHandler
@ControllerAdvice
class ExceptionHandlers {
@ExceptionHandler(MissingServletRequestParameterException.class)
public final ResponseEntity<ApiError> missingArgument(Exception cause, WebRequest request) {
....
}
@ExceptionHandler(NumberFormatException.class)
public final ResponseEntity<ApiError> missingArgument(Exception cause, WebRequest request) {
....
}
@ExceptionHandler(JsonParseException.class)
public final ResponseEntity<ApiError> missingArgument(Exception cause, WebRequest request) {
....
}
....
}
但是我这里有三个问题
1)很多样板,所有方法都一样
2)我不想知道可以从参数处理程序中引发什么异常,我想要所有这些异常,无论哪个。这种代码很难保持最新。
3),最糟糕的是,我不能说,例如,JsonParseException是一个Bad Request。这些异常可能从其他地方抛出,例如MongoDB存储库(mongojack),在其他客户端读取响应或在消息转换器(输出)中序列化我的对象。
我尝试创建自己的HandlerMethodArgumentResolver,这种情况很容易处理,因为无论从处理程序中遇到哪种错误,我都可以抛出特定的异常,但是我不能使用库存处理程序来做到这一点。
谢谢。