如何在@ControllerAdvice中处理所有未处理的异常?

时间:2015-09-18 08:10:58

标签: exception-handling spring-boot

我使用此异常处理程序来处理Spring启动应用程序(REST API)中的一些特定异常:

@ControllerAdvice
class GlobalExceptionHandler {

    @ExceptionHandler(NotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public
    @ResponseBody
    ResponseMessage notFound(NotFoundException ex) {
        return new NotFoundResponseMessage(ex.getMessage());
    }

    @ResponseStatus(value = HttpStatus.UNSUPPORTED_MEDIA_TYPE)
    @ExceptionHandler(HttpMediaTypeNotSupportedException.class)
    public
    @ResponseBody
    ResponseMessage unsupportedMediaType(HttpMediaTypeNotSupportedException ex) {
        return new UnsupportedMediaTypeResponseMessage(ex.getMessage());
    }

    @ExceptionHandler(UnauthorizedException.class)
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public
    @ResponseBody
    ResponseMessage unauthorized(UnauthorizedException ex) {
        return new UnauthorizedResponseMessage(ex.getMessage());
    }

    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
    public
    @ResponseBody
    ResponseMessage methodNotAllowed(HttpRequestMethodNotSupportedException ex) {
        return new MethodNotAllowedResponseMessage(ex.getMessage());
    }

    @ExceptionHandler(ForbiddenException.class)
    @ResponseStatus(HttpStatus.FORBIDDEN)
    public
    @ResponseBody
    ResponseMessage forbidden(ForbiddenException ex) {
        return new ForbiddenResponseMessage(ex.getMessage());
    }

}

我想用一个" global"处理所有其他例外情况。处理方法。但我需要在此方法中获取HTTP状态代码以处理错误消息等。

问题

有没有办法将所有未处理的异常重定向到一个特定的方法?我该怎么办?

1 个答案:

答案 0 :(得分:1)

请参阅docs

  

在DispatcherServlet的应用程序中声明的任何Spring bean   将使用实现HandlerExceptionResolver的上下文   拦截并处理MVC系统中引发的任何异常,而不是   由财务主任处理。

PFQuery *query1 = [PFQuery queryWithClassName:@"Class1"];
[query whereKey:@"key" equalTo:@"value"];

PFQuery *query2 = [PFQuery queryWithClassName:@"Class2"];
    [query whereKey:@"key" equalTo:@"value"];

NSArray *myQueries = @[query1, query2];
[myQueries find objectsInBackground];