我的问题是我注册的错误处理程序代码不适用于所有错误。在我的 web.xml 中,我注册了我的默认错误处理程序:
<servlet>
<servlet-name>ShowErrorHandlerServlet</servlet-name>
<servlet-class>tools.ErrorHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowErrorHandlerServlet</servlet-name>
<url-pattern>/showerror</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/showerror</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/showerror</location>
</error-page>
<error-page>
<location>/showerror</location>
</error-page>
我正在使用 Jersey 来映射休息请求,所以例如这样的:
@GET
@Path("/throwError")
public void testThrowUnauthException() {
// String s = null;
// s.toString();
// /*
// * this nullpointer exception would be caught correctly because of
// * <exception-type>java.lang.Exception</exception-type> in the web.xml
// */
throw new WebApplicationException(Response.Status.UNAUTHORIZED);
}
未捕获 WebApplicationException 并显示默认的 jetty 401 错误页面:
HTTP 错误 401
访问 /v1/locations/throwError 时出现问题。原因:
UNAUTHORIZED Powered by Jetty
注册
<error-page>
<error-code>401</error-code>
<location>/showerror</location>
</error-page>
不起作用,但它适用于 404 错误..
有人知道为什么会这样吗?我需要使用 ErrorHandlerServlet 捕获所有错误,以将它们转换为 json 错误消息。