在我的应用程序中,我针对异常情况抛出 WebApplicationException,以便我可以使用 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 应用程序异常已在过滤器链中抛出?我原以为 Jersey 会重新抛出异常,但这是不正确的。
最佳答案
既然你没有提出具体问题,我就发表一些看法。
- 您应该使用声明性事务,例如 Spring 提供的事务,而不是尝试以这种方式自己管理它们,因为您会遇到这样的问题。
- 与 1. 类似,我非常怀疑您是否希望在所有异常情况下回滚事务。再次强调,寻找一个框架来帮助你解决这个问题。
- Jersey 拦截并处理 WebApplicationException。想必您正在以标准方式运行 Jersey,作为 servlet。过滤器围绕 servlet 执行。因此,Jersey servlet 在通过过滤器之前处理异常。
关于java - Jersey WebApplicationException 和 servlet 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681049/