@ResponseStatus和@ResponseBody不能与@ExceptionHandler一起使用

3

我尝试实现一个@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进行消息转换。

非常感谢您的帮助。


控制器可以从GlobalErrorHandler继承吗? - EpicPandaForce
2
为什么他们不应该这样做呢?@ControllerAdvice 用于处理控制器未处理的任何异常。 - Lizzy
好的,我不确定那个注释。 - EpicPandaForce
1个回答

4

发现了问题。原因是Response POJO的所有getter和setter都没有定义。


1
上帝保佑你。我已经搜索了3个小时的解决方案。我希望我能给你+10000。 - Alfonso Nishikawa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接