【发布时间】:2014-12-06 14:27:51
【问题描述】:
我尝试实现@ControllerAdvice 来全局处理与我的 Web 应用程序相关的一些一般异常。我想发送一个包装好的 JSON 响应,并相应地设置响应状态。这是一个代码示例。
@ControllerAdvice
public class GlobalErrorHandler {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(Exception.class)
@ResponseBody
public Response handleAllErrors() {
Response wrapped = new Response(HttpServletResponse.SC_BAD_REQUEST, "error");
wrapped.setMessage("Could not retrieve data");
return wrapped;
}
}
Response 是用于包装响应的 POJO。问题是,尽管有 @ResponseStatus 注释,但响应始终具有状态代码 500(内部服务器错误),默认错误页面显示堆栈跟踪。即使@ResponseBody 似乎也不起作用。但是documentation 声明我可以在@ExceptionHandler 方法上发送JSON 响应。我不明白我在这里做错了什么。
我正在使用 Spring 3.2.8 发布框架,Gson 用于消息转换,如果这很重要的话。
任何帮助将不胜感激。
【问题讨论】:
-
控制器能否从 GlobalErrorHandler 扩展?
-
他们为什么要这样做? @ControllerAdvice 用于处理控制器未处理的任何异常
-
还不错,不确定那个注释。
标签: spring exception-handling gson