JAX-RS自定义ExceptionMapper不拦截RuntimeException

2024-04-13

我想包裹底层RuntimeExceptions自定义 json 格式,使得 servlet 容器不会将堆栈跟踪转储到客户端。

我关注这个问题:使用 XML 或 JSON 的 JAX-RS (Jersey) 自定义异常 https://stackoverflow.com/questions/3227360/jax-rs-jersey-custom-exception-with-xml-or-json。 打电话时:

try {
  doSomething(parameters);
}
catch(RuntimeException e) {
  throw new MyCustomException(500 , e.getMessage() , Status.INTERNAL_SERVER_ERROR);
}

当我故意输入错误的参数(并触发RuntimeException被抛出doSomething()),我没看到MyCustomExceptionMapper在职的。相反,servlet 容器转储:

The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
api.MyCustomException: (underlaying msgs)

The MyCustomExceptionMapper确实已注册在javax.ws.rs.core.Application :

  @Override
  public Set<Class<?>> getClasses()
  {
    Set<Class<?>> set = new HashSet<Class<?>>();
    set.add(other classes);
    set.add(MyCustomExceptionMapper.class);
    return set;
  }

我错过了什么 ?

多谢 !

环境:JAX-RS,jersey-server 1.5

课程规格:

class MyCustomException extends RuntimeException 
@Provider
class MyCustomExceptionMapper implements ExceptionMapper<MyCustomException>

updated :

我怀疑Application.getClasses()从未被调用过,所以我添加了一些 println 消息:

  @Override
  public Set<Class<?>> getClasses()
  {
    System.out.println("\n\n\n\n ApiConfig getClasses");
  }

事实上,它从未表现出来!

我确信这个 ApiConfig 位于 web.xml 中:

  <context-param>
    <param-name>javax.ws.rs.core.Application</param-name>
    <param-value>destiny.web.api.ApiConfig</param-value>
  </context-param>

但为什么泽西岛似乎从来没有打电话过呢?


我找到了解决方案。

我所要做的就是用 Springs 注释 Custom ExceptionMapper@Repository.

并删除 web.xml 中的部分(不需要)

  <context-param>
    <param-name>javax.ws.rs.core.Application</param-name>
    <param-value>destiny.web.api.ApiConfig</param-value>
  </context-param>

因为 Spring 会查找所有 @Repository 并找到一个 @Provider ,而 Jersey 会使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAX-RS自定义ExceptionMapper不拦截RuntimeException 的相关文章

随机推荐

  • jQuery 中的多个 AJAX 请求

    我有一个函数 可以从两个位置提取数据并将返回的内容放置在向用户显示的模式对话框上 这两个请求都是异步的 因为它们是跨域的 问题在于我不想在两个请求完成加载之前显示模式 在加载模式之前 如何检查以确保两个请求都已完成 我尝试将 openMod
  • 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/batch]

    情况 我正在使用 Spring Batch 为我们的数据仓库构建累积快照 但我遇到了一个我无法弄清楚的配置障碍 我使用 STS SpringSource Tool Suite 2 8 1 创建了一个简单的 Spring Batch 项目春季
  • Keras 错误:调用 Predict_on_batch 时“优化循环失败:已取消:操作已取消”

    我有一些使用 keras 的旧工作代码 我最近把它掸掉并尝试使用它 但使用的是当前版本的 keras tensorflow 调用 Predict on batch 时收到警告 错误 W tensorflow core data root d
  • ValidateRequest = False 但实际上它仍然是 True 并且忽略了它?

    我想禁用请求验证特别是在ASP NET MVC 2 0 RTM 所以我添加了一些必要的查看页面指令部分 如下所示 but 请求验证不是残疾人 我还添加了请求验证属性控制器中的相关操作如下 System Web Mvc ValidateInp
  • ASP.NET MVC 中的 RouteLink 和 ActionLink 有什么区别?

    我认为标题已经概括了这一点 有什么区别RouteLink and ActionLink 在 ASP NET MVC 中 即你什么时候使用Html RouteLink 你什么时候使用Html ActionLink 在你看来 操作和路由不必具有
  • 如何诊断护照真伪?

    由于该函数没有返回值 我如何确定导致该函数失败的原因 我有以下代码 function test req IncomingMessage res ServerResponse next err any gt void passport aut
  • 在jquery中创建循环背景动画

    我想要的是 当页面加载时 背景颜色为红色 10 秒后 bgColor 变为绿色 并带有淡入淡出动画 再过 10 秒后 它会变成橙色 然后又变成红色 依此类推 有人可以帮忙吗 Use 设置间隔 http www w3schools com j
  • Firestore - 如何在数据库中自动减少整数值?

    Firestore 最近推出了一项新功能 可以自动递增和递减整数值 我可以使用增加整数值 例如 FieldValue increment 50 但如何减量呢 我尝试使用FieldValue decrement 50 但FieldValue中
  • 在 C++ 中旋转图像而不使用 OpenCV 函数

    描述 我正在尝试在不使用 C 中的 OpenCV 函数的情况下旋转图像 旋转中心不必是图像的中心 它可能是不同的点 偏离图像中心 到目前为止 我遵循各种来源进行图像插值 我知道source https stackoverflow com a
  • 检测节点的系统路径上是否存在可执行文件

    Question 有没有一种简单的方法可以使用节点判断系统可执行文件在系统路径上是否可用 例如 如果用户安装了 python usr bin python and usr bin is in PATH我如何在 Node 中检测到这一点 相反
  • 在 Filter 内执行并呈现 JSP

    我有一个包含页面顶部内容的 JSP 我们将其称为 header jsp 出于性能原因 我想在构建页面的其余部分之前呈现此 JSP 并将其刷新给用户 看here http developer yahoo com performance rul
  • 元素不可点击错误 Ruby / Watir

    在我的测试中 我尝试访问 etsy com 进行搜索 单击结果 然后将商品添加到我的购物车 我可以做所有事情 直到我尝试单击 添加到购物车 按钮 下面的代码实际上在 IRB 中工作 所以我知道我的定位器是可靠的 但是当我运行测试时 我得到一
  • 在 Elasticsearch 中过滤折叠结果

    我有一个弹性搜索索引 其中包含表示给定时间点实体的文档 当实体更改状态时 会创建带有时间戳的新文档 当我需要获取所有实体的当前状态时 我可以执行以下操作 GET https 127 0 0 1 9200 myindex search col
  • .NET RIA 服务与 MVC 风格存储库?

    我有一个包含多个项目的解决方案 包括两个共享位于外部程序集中 也在同一解决方案中 的存储库和模型的 asp net mvc 项目 本质上 Core 存储库 楷模 国内 Web 基本MVC站点 引用核心项目 国际网 基本MVC站点 引用核心项
  • 使用 NativeMessaging 进行边缘扩展

    我有一个具有本机消息传递支持的边缘扩展 它与系统中运行的 uwp 应用程序进行通信 是否必须将扩展打包到 uwp 应用程序的 appx 文件夹中 如果没有 那么我们如何将扩展上传到边缘扩展存储中 我遵循 secureInput 示例 htt
  • 快速向 SQL Server 插入 200 万行

    我必须从文本文件中插入大约 200 万行 通过插入 我必须创建一些主表 将如此大的数据集插入 SQL Server 的最佳且快速的方法是什么 我认为最好读取 DataSet 中文本文件的数据 试用SQL批量复制 从 C 应用程序批量插入 S
  • GSON反序列化:如何知道对象?

    我尝试使用 gson 库来反序列化发送给我的对象流 在我见过的所有示例中 当调用 fromJson 方法时 我们已经知道我们期望拥有什么类型的对象 就我而言 我收到不同对象的流 我想知道在反序列化对象之前了解对象类的最佳方法 A B B1
  • Android 自定义通知布局与 RemoteViews

    我正在尝试使用此为我的 Android 应用程序创建自定义通知post https stackoverflow com questions 18367631 change notification layout 我偶然发现了一个我在过去 2
  • 使用 LIMIT 时获取总行数? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 offset limit 查找 mySQL 查询中的结果总数 https stackoverflow com questions 5928611 find total number of res
  • JAX-RS自定义ExceptionMapper不拦截RuntimeException

    我想包裹底层RuntimeExceptions自定义 json 格式 使得 servlet 容器不会将堆栈跟踪转储到客户端 我关注这个问题 使用 XML 或 JSON 的 JAX RS Jersey 自定义异常 https stackove