强制Spring始终将异常报告为JSON

时间:2015-02-27 12:54:24

标签: spring web-services rest

如何强制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)访问它时得到的结果:

Whitelabel错误页面

此应用程序没有/ error的显式映射,因此您将此视为后备。

2月27日星期五13:37: 27 CET 2015出现意外错误(type = Not Found,status = 404)。无消息

我知道这可以通过设置请求标头以某种方式完成,但我希望JSON响应是唯一的变体。

1 个答案:

答案 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表示。此解决方案应适用于每个容器/服务器,您可以获得有关异常的更多信息。