【问题标题】:How to suppress Jersey exceptions that Jersey throws automatically?如何抑制 Jersey 自动抛出的 Jersey 异常?
【发布时间】:2013-09-11 07:03:58
【问题描述】:

我在 JAVA 中使用 Jersey 1.14 进行 REST。如果资源的 POST 正文中有任何错误,Jersey 会抛出异常,它会向客户端提及我的内部类。 当错误从我的应用程序传递时,我继续想给他们错误,但抑制 Jersey 抛出的错误(对于甚至没有到达我的应用程序的请求,因为 Jersey 识别异常并抛出它)。 我搜索了任何标志来实现这一点,但找不到任何东西。有没有办法做到这一点?

编辑: 重新表述问题:静音/抑制球衣中无效输入的错误堆栈跟踪

更新: 我尝试使用 ExceptionMapper,捕获 java.lang.Exception。它会捕捉到缺少 Content-Type 时的异常,但当对象转换出错时无法捕捉到异常。

【问题讨论】:

    标签: java rest jersey jersey-client jersey-1.0


    【解决方案1】:

    您可以使用ExceptionMapper。这是an old article 的相关内容。

    【讨论】:

    • 我试过这个。但它适用于缺少 Content-Type 的情况,但不适用于对象转换出错的情况。它仍然抛出一个错误:无法识别的字段“xyz”(以及之后的类堆栈跟踪)
    • 我发现异常是什么。它正在抛出 JsonMappingException。但是现在的问题是,已经有一个ExceptionMapper类取了JsonMappingException,而且在注册mapper的时候,有时候注册我的mapper,有时候注册库的mapper
    【解决方案2】:

    Jersey 会抛出代码中未处理的异常。所以你需要将你的 web 服务代码包装在 try/catch 中。并捕获 Exception 类,以确保您在 Web 服务类中优雅地处理它。

    【讨论】:

    • 我不会有机会抛出异常,因为 Jersey 会引发异常,因为它无法从输入值创建输入对象的实例。有没有办法拦截 Jersey 异常?有一个 ExceptionMapper 接口,但是它也拦截方法抛出的异常。
    【解决方案3】:

    我相信这可以通过 server 配置来实现,因为 Jersey 似乎没有任何相关的configuration option

    您使用的是哪个 servlet 容器?


    (编辑)对于 Tomcat 搜索“tomcat 抑制异常堆栈跟踪”。大多数答案会让你在web.xml 中放置一个error-page 元素:

    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/your-custom-error-page.jsp</location>
    </error-page>
    

    当然,实现一个不包括堆栈跟踪的your-custom-error-page.jsp。它还可以检查应用程序环境并仅在 DEVELOPMENT 中显示堆栈跟踪。

    【讨论】:

    • 我正在使用 SpringServlet。即使我浏览了配置选项,也没有找到任何东西。
    • SpringServlet 是框架的一部分,它可以在任何 J(2)EE servlet 容器上运行。我的意思是服务器(可能是Tomcat?JBoss?Websphere?等等...)
    • 哦,我用的是tomcat。
    【解决方案4】:

    如果您正在解析 xml,您可以编写自定义 ContextResolver 来捕获异常。我是json的情况,你可能需要一个messagebodyreader/writer

    【讨论】:

      猜你喜欢
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 2015-11-04
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2013-09-09
      相关资源
      最近更新 更多