【问题标题】:@ResponseStatus and @ResponseBody not working with @ExceptionHandler@ResponseStatus 和 @ResponseBody 不能与 @ExceptionHandler 一起使用
【发布时间】: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


【解决方案1】:

发现问题。这是因为没有定义 Response POJO 的所有 getter 和 setter。

【讨论】:

  • 上帝保佑你。我花了 3 个小时寻找解决方案。我希望我能给你+10000
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 2011-09-10
  • 2015-11-18
  • 1970-01-01
  • 2011-05-01
相关资源
最近更新 更多