代码之家  ›  专栏  ›  技术社区  ›  Ponleu

Spring筛选器抛出自定义异常

  •  1
  • Ponleu  · 技术社区  · 7 年前

    我有一个控制器建议,可以处理应用程序抛出的所有验证异常,如下所示。

    @RestControllerAdvice
    public class RestApiExceptionController {
    
        @ExceptionHandler(ValidationErrorException.class)
        public ResponseEntity<?> appNotFoundException(ValidationErrorException exception) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                .body(new ErrorResponse(exception.getErrorCode(), exception.getMessage())); 
        }
    }
    

    public class ValidationFilter implements Filter {
        ...
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
            throw new ValidationErrorException(); // This is impossible
        }
        ...
    }
    

    在这种情况下,如何抛出ValidationErrorException,或者有其他更好的方法来处理此类任务。

    1 回复  |  直到 7 年前
        1
  •  3
  •   ScanQR    7 年前

    验证通常在请求对象上完成,这些对象通常在中可用 Controller 层层叠叠 transformed 从请求格式到服务器处理格式。e、 g.JSON到Java对象。

    因此,应执行或触发验证 控制器 层,一旦完成整个 filter 锁链。

    随后抛出的任何验证异常都可以在下面的处理程序中处理,

    @RestControllerAdvice
    public class RestApiExceptionController {
    
        @ExceptionHandler(ValidationErrorException.class)
        public ResponseEntity<?> appNotFoundException(ValidationErrorException exception) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                .body(new ErrorResponse(exception.getErrorCode(), exception.getMessage())); 
        }
    }
    

    非常 one 为了 filters

    要在客户端访问资源之前拦截来自客户端的请求,请执行以下操作: 后端。

    component 在你的情况下,就是这样 控制器 .

    resource 基于验证 滤器 组件。