我尝试实现@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进行消息转换。
任何帮助将不胜感激。
最佳答案
找到了问题。这是因为未定义Response POJO的所有获取器和设置器。
关于spring - @ResponseStatus和@ResponseBody无法与@ExceptionHandler一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27332695/