如何处理从所有HandlerMethodArgumentResolvers抛出的exceptons?

时间:2019-02-28 04:29:44

标签: spring-boot exception-handling

我正在使用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,这种情况很容易处理,因为无论从处理程序中遇到哪种错误,我都可以抛出特定的异常,但是我不能使用库存处理程序来做到这一点。

谢谢。

0 个答案:

没有答案