@ResponseStatus和@ResponseBody不使用@ExceptionHandler

时间:2014-12-06 14:27:51

标签: spring exception-handling gson

我尝试实现@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用于消息转换。

任何帮助都会很高兴。

1 个答案:

答案 0 :(得分:3)

发现了这个问题。这是因为没有定义响应POJO的所有getter和setter。