如何强制Spring始终将未捕获的异常转换为JSON而不是HTML页面?
这是我从Chrome的REST客户端插件发出请求时得到的结果:
{
timestamp: 1425041457798
status: 404
error: "Not Found"
exception: "com.some.my.Exception"
message: "/rrr does not exist"
path: "/test/rrr"
}
但这是我从浏览器或Jersey API
(你看到解析的HTML)访问它时得到的结果:
此应用程序没有/ error的显式映射,因此您将此视为后备。
2月27日星期五13:37: 27 CET 2015出现意外错误(type = Not Found,status = 404)。无消息
我知道这可以通过设置请求标头以某种方式完成,但我希望JSON响应是唯一的变体。
答案 0 :(得分:0)
首先,我们需要为控制器内部的异常添加一些异常解析器。我更喜欢扩展ResponseEntityExceptionHandler
并添加自己的方法,但有一篇关于spring.io的文章:http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
之后,如果您仍然获得以下页面,则可以覆盖org.springframework.boot.autoconfigure.web.ErrorController
。有一个例子:BasicErrorController
。但这只适用于使用嵌入式容器的spring boot应用程序。例如,如果您将创建war文件表单spring boot项目并将在tomcat下部署,您将获得标准的tomcat错误页面。
所以这意味着ErrorController
不是常见的解决方案。
在我的情况下,我会在过滤器中抛出异常,这就是显示/error
页面的原因。所以解决方案是编写自己的过滤器,将异常转换为JSON表示。此解决方案应适用于每个容器/服务器,您可以获得有关异常的更多信息。