私の問題は、登録したエラー ハンドラ コードがすべてのエラーで機能しないことです。私の 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>
私はジャージーを使用して残りのリクエストをマップしています。たとえば、次のようなものです。
@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 エラーに対しては動作します。
誰かがなぜこれが起こっているのか考えていますか? エラーを json エラー メッセージに変換するには、ErrorHandlerServlet ですべてのエラーをキャッチする必要があります。