【问题标题】:How can I get the stack trace when 500 server error happens in Jersey?当泽西岛发生 500 服务器错误时,如何获取堆栈跟踪?
【发布时间】:2017-08-18 13:27:12
【问题描述】:

在球衣服务器中出现服务器 500 错误:

  • 在服务器响应中没有堆栈跟踪或某些信息。

  • 在 Eclipse 控制台中没有异常堆栈跟踪

我尝试在服务器中捕获异常并在控制台中打印跟踪,但没有任何反应

发生 500 服务器错误时如何获取堆栈跟踪?

【问题讨论】:

  • 根本不需要例外。查看您正在调用什么以及调用时的参数是什么。然后调试服务器代码。
  • 我一直试图以这种方式查看问题的原因一天。我需要一个踪迹。服务器失败只是响应“return MyObject”
  • 它是生产服务器还是在您的开发中运行?您可以使用调试器并设置断点吗?事情是:如果它不是异常,您将不会得到跟踪......如果它实际上是异常(被吞下但已处理),您将不得不找到它被抛出的位置以获取它的跟踪。但如果你这样做了,你就已经知道去哪里找了……
  • 它只返回 500“内部服务器错误”还是有更复杂的消息?您可以将日志级别提高到 Debug 或 Trace 吗?
  • 这是一个通用的 500 内部服务器错误。我可以尝试使用断点。

标签: maven jersey-2.0 grizzly


【解决方案1】:

大多数时候,通用的ExceptionMapper 就可以解决问题。

@Provider
public class DebugMapper implements ExceptionMapper<Throwable> {
    @Override
    public Response toResponse(Throwable t) {
        t.printStackTrace();
        return Response.serverError()
            .entity(t.getMessage())
            .build();
    }
}

那就注册吧

ResourceConfig config = new ResourceConfig()
        .register(DebugMapper.class);

当异常没有被映射时,有时异常会被 Jersey 吞没,你不会看到发生了什么。当问题在泽西级别时,这通常有效。

另见:

【讨论】:

  • 是的,现在我的 Eclipse 控制台中有跟踪信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
相关资源
最近更新 更多