[英]Spring filter throws custom exception
我有一个控制器建议,处理我的应用程序抛出的所有验证异常,如下所示。
@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,或者还有其他更好的方法来处理此类任务。
该验证是在它们是一般可以在请求的对象通常做Controller
层它们之后transformed
从请求格式到服务器处理的格式。 例如JSON到Java对象。
因此,一旦通过完成整个filter
链接到达请求,就应该在Controller
层上执行或触发验证。
稍后抛出的任何验证异常都可以在您的后续处理程序中处理,
@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
,它们就可用,在您的情况下,它是Controller
。
因此,更好的方法是不在filter
组件上进行任何基于resource
的验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.