[英]Jersey WebApplicationException and servlet filters
在我的应用程序中,我为异常情况抛出 WebApplicationExceptions,以便我可以用我的 500 传回好的消息。 我遇到的问题是我有一个用于 hibernate 事务的 servlet 过滤器,并且注意到 WebApplicationException 在返回到 servlet 过滤器之前被捕获。 我已经包含了一个简短版本的 servlet 过滤器作为示例。 注意:我只有另一个 servlet 过滤器,它进行身份验证并且没有捕获
try {
em = MauiPersistenceUtil.getEntityManager();
em.getTransaction().begin();
// raises WebApplicationException
filterChain.doFilter(request, response);
// since WebApplicationException is trapped somewhere else up
// the filterChain bad data is committed here
em.getTransaction().commit();
} catch (Throwable ex) {
// I want the WebApplicationException to reach here
em.getTransaction().rollback();
}
谢谢,赎金
编辑:瑞安斯图尔特指出我实际上并没有问过问题。 我的问题是:如何在 servlet 过滤器中判断 web 应用程序异常在 filterChain 中被抛出? 我期待 Jersey 会重新抛出异常,但这是不正确的。
既然你没有问具体的问题,我会做一些观察。
您应该检查“doFilter”之后的响应状态:
filterChain.doFilter(servletRequest, servletResponse);
Integer status = ((HttpServletResponse) servletResponse).getStatus();
if (HttpServletResponse.SC_INTERNAL_SERVER_ERROR.equals(status) {
em.getTransaction().rollback();
} else {
em.getTransaction().commit();
}
如果 Status 为 500 则回滚,就这么简单。 您永远不会在 Servlet 过滤器上遇到 WebApplicationException,它们会被 Jersey Servlet 捕获。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.