java - Jersey WebApplicationException 和 servlet 过滤器

标签 java jersey jax-rs

在我的应用程序中,我针对异常情况抛出 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 会重新抛出异常,但这是不正确的。

最佳答案

既然你没有提出具体问题,我就发表一些看法。

  1. 您应该使用声明性事务,例如 Spring 提供的事务,而不是尝试以这种方式自己管理它们,因为您会遇到这样的问题。
  2. 与 1. 类似,我非常怀疑您是否希望在所有异常情况下回滚事务。再次强调,寻找一个框架来帮助你解决这个问题。
  3. Jersey 拦截并处理 WebApplicationException。想必您正在以标准方式运行 Jersey,作为 servlet。过滤器围绕 servlet 执行。因此,Jersey servlet 在通过过滤器之前处理异常。

关于java - Jersey WebApplicationException 和 servlet 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681049/

相关文章:

java - 使用 JAX-RS 的不区分大小写的 URL

java - 在文本字段屏幕上显示星星

带有 Jersey 和 Tomcat 的 Java Web 服务。 ¿如何在 Web 服务停止时停止所有线程?

java - 当路径中的第一个缺失时,多个 PathParams 不会失败

Tomcat错误404 : The origin server did not find a current representation for the target resource or is not willing to disclose that one exists

rest - 什么是JAX-RS实现?

java - 如何加载/添加第三方jar文件到bitbucket?

java - 在 java.time 中,为什么 WeekFields.SUNDAY_START 会为 2020-12-29 生成周数 1 而不是 53?

java - 如果用户从表单 B 返回列表,如何刷新表单 A 中的列表

java - 使用 Jersey 的 RESTful Web 服务中的路径地址