gpt4 book ai didi

google-app-engine - JavaEE默认错误处理程序servlet无法捕获引发的错误

转载 作者:行者123 更新时间:2023-12-03 08:59:43 24 4
gpt4 key购买 nike

我的问题是我注册的错误处理程序代码不适用于所有错误。在我的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 ERROR 401

Problem accessing /v1/locations/throwError. Reason:

UNAUTHORIZED 
Powered by Jetty


注册
<error-page>
<error-code>401</error-code>
<location>/showerror</location>
</error-page>

不起作用,但它适用于404错误。

有人知道为什么会这样吗?我需要使用ErrorHandlerServlet捕获所有错误,以将其转换为json错误消息。

最佳答案

我认为Jersey取代了Jetty行为,因此它没有采用XML的值(value)。解决它的一种方法(可能不是最优雅的):

@Context HttpServletResponse res;
@GET
@Produces(MediaType.TEXT_HTML)
public String doFoo(){
try {
//Code that causes the error
} catch (Exception e) {
res.sendRedirect("/showError");
}
return "";
}

另一个想法是扩展WebApplicationException并自己管理响应(可能是最好的)

关于google-app-engine - JavaEE默认错误处理程序servlet无法捕获引发的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10702200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com