Spring Boot-自定义异常处理程序

时间:2018-12-06 18:50:19

标签: java rest spring-boot exception filter

我正在使用Spring Boot开发一个rest应用程序。 此应用程序具有一个自定义过滤器,该过滤器仅允许在某些请求下进行访问。 如果用户需要特定资源,则过滤器将引发异常。 如何在全局级别处理此过滤器中生成的所有异常?

我尝试使用beforeMount()注释,但无法正常工作。

3 个答案:

答案 0 :(得分:0)

首先,您应该创建一个自定义异常,并从runtimeException扩展它

public class CustomException extends RuntimeException
{
    ...
}

然后您可以像这样

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity handleCustomException(CustomException ex) {
          return ResponseHelper.response(ex.getData(), ex.getMsg(), 
         ex.getStatus());
        }
}

答案 1 :(得分:0)

首先,您可能具有自定义的Exception Handler类,它将替换默认的

ResponseEntityExceptionHandler

下面是我在学习期间使用的一个示例代码:

@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Exception.class)
    public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));
        return new ResponseEntity<>(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(UserNotFoundException.class)
    public final ResponseEntity<Object> handleUserNotFoundException(Exception ex, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));
        return new ResponseEntity<>(exceptionResponse, HttpStatus.NOT_FOUND);
    }

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,               HttpHeaders headers, HttpStatus status, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "Validation Failed", ex.getBindingResult().toString());
        return new ResponseEntity<>(exceptionResponse, HttpStatus.BAD_REQUEST);
    }
}

然后,您可以添加自定义的例外,并在需要时补充响应对象。

请在here上找到完整的代码以及其他类

答案 2 :(得分:0)

全局异常处理程序可以使用@ControllerAdvice 注解在spring boot 中实现。在 Spring Boot 中创建全局异常处理程序的完整源代码可用 here