java - 使用 ExceptionResolver 捕获 Spring MVC DispatcherServlet 异常

标签 java spring-mvc exception-handling

我试图为 Spring MVC 服务的每个请求返回一个有效的 JSON 主体,无论是正确的还是无效的。

使用 @ExceptionHandlerExceptionHandlerExceptionResolverDefaultHandlerExceptionResolver 和我自己的 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 异常处理覆盖,您必须实现 HandlerExceptionResolverOrdered 类,并将实现声明为 spring bean。您必须将 getOrder 值作为 Integer.MIN_VALUE 返回以覆盖任何其他现有处理程序。

关于java - 使用 ExceptionResolver 捕获 Spring MVC DispatcherServlet 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197348/

相关文章:

java - 选择后如何从JTree中获取选定的节点?

java - 如何在java中以正确的字符编码从给定的URL获取源代码?

java - 如何在spring mvc中使用java导入xls和xlsx文件

spring - 没有url映射的情况怎么处理?

html - 如何使用 Spring Boot 流式传输音频

c# - 异步等待异常捕获——我在哪个线程上?

java - Jenkins 代理机器突然停止

JavaFX - 如何将事件句柄分配给标签数组?

c# - 为什么要使用特定的异常捕获 block

exception - try/catch 语句中有多少条语句?