我正在使用Spring Boot开发一个rest应用程序。 此应用程序具有一个自定义过滤器,该过滤器仅允许在某些请求下进行访问。 如果用户需要特定资源,则过滤器将引发异常。 如何在全局级别处理此过滤器中生成的所有异常?
我尝试使用beforeMount()
注释,但无法正常工作。
答案 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