我试图为 Spring MVC 服务的每个请求返回一个有效的 JSON 主体,无论是正确的还是无效的。
使用 @ExceptionHandler
和 ExceptionHandlerExceptionResolver
、DefaultHandlerExceptionResolver
和我自己的 AbstractHandlerExceptionResolver
的组合我能够处理并为几乎所有发送到有效 Controller 或被 Spring Security 拒绝的无效请求设置主体。
但是,DispatcherServlet
抛出的错误,如 noHandlerFound
,无法被拦截,因此响应具有有效的 HTTP 状态代码,如 404,但正文包含Tomcat 默认 XML 错误。
有人知道如何设置或配置 Spring 异常解决程序以便拦截所有失败的请求并可以设置有效的 JSON 主体吗?
最佳答案
There is a section explaining spring 如何处理调度程序 servlet 的异常解析器:
The dispatcher's exception resolution strategy can be specified via a HandlerExceptionResolver, for example mapping certain exceptions to error pages. Default are AnnotationMethodHandlerExceptionResolver, ResponseStatusExceptionResolver, and DefaultHandlerExceptionResolver. These HandlerExceptionResolvers can be overridden through the application context. HandlerExceptionResolver can be given any bean name (they are tested by type).
为了能够支持 Dispatcher 异常处理覆盖,您必须实现 HandlerExceptionResolver
和 Ordered
类,并将实现声明为 spring bean。您必须将 getOrder
值作为 Integer.MIN_VALUE
返回以覆盖任何其他现有处理程序。
关于java - 使用 ExceptionResolver 捕获 Spring MVC DispatcherServlet 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197348/