Java 如何始终如一地处理jersey和tomcat错误?

Java 如何始终如一地处理jersey和tomcat错误?,java,http,tomcat,error-handling,jersey,Java,Http,Tomcat,Error Handling,Jersey,我用jersey实现了一些(REST)服务。如果存在错误请求,jersey将处理错误并使用一些JSON内容进行回答。这里有一个例外,它应该能捕捉到一切: public class MyExceptionMapper implements ExceptionMapper<Throwable> 公共类MyExceptionMapper实现ExceptionMapper 但是,如果存在无效的HTTP请求(例如无效的内容类型),tomcat会在jersey有机会这样做之前处理异常。结果是

我用jersey实现了一些(REST)服务。如果存在错误请求,jersey将处理错误并使用一些JSON内容进行回答。这里有一个例外,它应该能捕捉到一切:

public class MyExceptionMapper implements ExceptionMapper<Throwable>
公共类MyExceptionMapper实现ExceptionMapper
但是,如果存在无效的HTTP请求(例如无效的内容类型),tomcat会在jersey有机会这样做之前处理异常。结果是一些丑陋的tomcat HTML错误页面,而不是所需的JSON

我知道可以在部署描述符中设置
,但我无法访问任何错误详细信息

有没有办法防止tomcat捕捉到这个错误?如果是这样,jersey可以用它的ExceptionMapper捕捉它并返回正确的响应。

您知道可以设置“错误页”,但您将它指向什么?如果它只是一个静态网页,那么是的,您将无法访问错误详细信息。但是,如果您将其转发给一个用于处理错误的servlet,那么您应该有关于错误的详细信息,并且可以将控制权传递回jersey,等等

i、 e

web.xml:

  <error-page>
    <error-code>415</error-code>
    <location>/InvalidContentHandler</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/InvalidContentHandler</location>
  </error-page>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    processError(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    processError(request, response);
}

private void processError(HttpServletRequest request, HttpServletResponse response) throws IOException {

    // Pass control to Jersey, or get some info:
    Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
    Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
    String servletName = (String) request.getAttribute("javax.servlet.error.servlet_name");
    String requestUri = (String) request.getAttribute("javax.servlet.error.request_uri");
    ...
}