我尝试实现一个@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
似乎也无效。但是文档指出,我可以在@ExceptionHandler
方法上发送JSON响应。我不明白我在这里做错了什么。
如果有影响,我正在使用Spring 3.2.8发布框架,并且使用Gson进行消息转换。
非常感谢您的帮助。