【发布时间】:2016-10-29 23:16:45
【问题描述】:
我有一个带有 @RestController 注释的 Spring 控制器,它正在返回 JSON。我还有一个用@ControllerAdvice 注释的类,其中@ExceptionHandlers 与一些自定义异常相关。我正在使用 Tomcat 来提供这个 RESTful API。我希望捕获任何非自定义异常,例如来自 3rd 方库或 NullPointerException 的异常,并返回状态为 500 - 内部服务器错误作为 JSON 并带有消息而不是显示错误的 HTML 页面。
如果我在控制器建议中使用@ExceptionHandler(Exception.class),它将接管所有 Spring 异常,例如 MissingPathVariableException.class,这并不理想。我尝试过扩展 Spring 的 ResponseEntityExceptionHandler,但是这个类没有用 @ResponseBody 注释所以不返回 JSON。
- 如何在 Spring RESTful API 中为未捕获的和未知的异常(您无法计划的异常)返回 JSON,而不影响 Spring 的内部?
- 如何才能完全关闭返回 HTML 并确保无论请求是否有异常都只有 JSON 响应?
【问题讨论】:
标签: java json spring-mvc exception-handling spring-restcontroller