Spring异常处理程序无法正常工作

时间:2017-12-12 15:46:15

标签: spring-boot exceptionhandler

当我使用基于控制器的spring异常处理程序时,它无法正常工作。

我的代码在这里:

{{1}}

应用程序启动调试模式后,访问http://localhost:8080/page handleException 一直在运行,视图低于预期。为什么? enter image description here

1 个答案:

答案 0 :(得分:1)

问题在于@ResponseStatus注释。请查看以下文章:http://blog.sizovs.net/spring-rest-exception-handler/。在本文的中间,作者说:

  

警告:在异常类上使用此批注时,或者在设置此批注的reason属性时,将使用HttpServletResponse.sendError方法。   使用HttpServletResponse.sendError,响应被认为是完整的,不应再写入。此外,Servlet容器通常会编写HTML错误页面,因此会使用不适合REST API的原因。对于这种情况,最好使用org.springframework.http.ResponseEntity作为返​​回类型,并且完全避免使用@ResponseStatus。

根据一篇Spring文章:https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc Spring MVC按照以下顺序链接以下三个解析器:

  
      
  • ExceptionHandlerExceptionResolver将未捕获的异常与处理程序(控制器)和任何控制器建议上的合适@ExceptionHandler方法进行匹配。
  •   
  • ResponseStatusExceptionResolver查找由@ResponseStatus注释的未捕获异常(如第1部分所述)
  •   
  • DefaultHandlerExceptionResolver转换标准的Spring异常并转换它们   到HTTP状态代码(我之前没有提到它,因为它是Spring MVC的内部代码)。
  •   

因此在ExceptionHanlderExceptionResolver之后触发ResponseStatusExceptionResolver并使用默认值并显示Spring的错误页面。

要快速修复,请尝试删除@ResponseStatus,您应该会在浏览器中看到自定义错误页面。