重写 Spring Data Rest 请求映射

2024-04-20

我们目前有一个level 2 http://martinfowler.com/articles/richardsonMaturityModel.htmlRESTful Web 服务。我们正在更新该服务以纳入超媒体支持。我们在后端使用 Spring Data Rest 来处理 HATEOAS 属性的设置。我们遇到的问题是,在迁移完成之前,我们仍然需要支持旧版 API 使用者,这意味着我们仍然需要支持没有 HAL 属性(例如“_links”和“_embedded”)的响应。

由于一些不值得解释的原因,我们无法通过 URL 版本控制来解决这个问题。相反,我们需要能够将带有“application/json”Accept 标头的请求映射到我们的旧控制器,并让 SDR 处理带有“application/hal+json”的任何请求。本质上,我们希望使用 SDR 作为后备来处理专门请求 HAL 格式响应的 API 请求。

我在以下内容中看到了这段摘录特别提款权文档 https://github.com/spring-projects/spring-data-rest/wiki/Adding-Spring-Data-REST-to-an-existing-Spring-MVC-Application:

我们注册一个自定义的 HandlerMapping 实例,它只响应 RepositoryRestController 并且仅当路径要由 春季数据休息。为了保留要处理的路径 由您的应用程序与 Spring Data REST 处理的应用程序分开, 此自定义 HandlerMapping 检查 URL 路径并检查是否 已以该名称导出存储库。如果有的话,它允许 由 Spring Data REST 处理的请求。如果没有 以该名称导出的存储库,它返回 null,这只是意味着 “让其他 HandlerMapping 实例尝试服务此请求”。

Spring Data REST HandlerMapping 配置为 order=(Ordered.LOWEST_PRECEDENCE - 100) 这意味着它通常是 当需要映射 URL 路径和现有的路径时,首先排队 应用程序将永远没有机会服务于本意的请求 对于存储库。例如,如果您有一个导出的存储库 名称“person”,然后是对您的应用程序启动的所有请求 带有“/person”的将由 Spring Data REST 处理,并且您的 应用程序永远不会看到该请求。如果您的存储库是 然而,以不同的名称导出(例如“people”),然后 对“/people”的请求将转到 Spring Data REST,对“/people”的请求将转到 Spring Data REST “/person”将由您的应用程序处理。

这似乎意味着我们试图完成的事情是可能的,假设 HandlerMapping 顺序可以进行不同的配置。但到目前为止我还没能做到这一点:

  • 将SDR的HandlerMapping设置为Ordered.HIGHEST_PRECEDENCE似乎没有效果。
  • 将 SDR 的 HandlerMapping 顺序设置为 Ordered.LOWEST_PRECEDENCE 似乎完全禁用了排序,并且我的自定义控制器确实处理了请求,但 SDR 不再响应任何请求。 application/hal+json 刚刚导致 406 状态。

有没有办法正确配置 HandlerMappings,以便我的自定义控制器优先,并且 SDR 字段处理未专门映射到我的控制器的任何请求?


None

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

重写 Spring Data Rest 请求映射 的相关文章

  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 是否有任何简单(且最新)的 Java 框架可用于在 Swing 应用程序中嵌入电影?

    我正在构建一个小型 Swing 应用程序 我想在其中嵌入一部电影 重要的是 这个应用程序是一个 WebStart 应用程序 并且该库应该能够打包在我启动的 jnlp 中 即 不依赖于本机库 我知道并尝试过 JMF 但我认为与其他框架相比 其
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • 在 Spring 中配置特定的内存数据库用于测试目的

    我该如何配置我的春季启动应用程序 以便当我运行时单元测试它将使用在记忆中数据库如H2 HSQL但当我跑步时春季启动应用程序它将使用生产数据库PostgreSQL MySQL 为此可以使用弹簧型材 这将是一种具体的方式 具有特定于环境的属性文
  • pycharm:在“调试”模式下从标准输入读取

    我正在 PyCharm 中调试此脚本 import sys def read in lines sys stdin readlines for i in range len lines lines i lines i replace n r
  • “sys.excepthook”和线程

    我正在使用Python 2 5并尝试使用自定义excepthook在我的程序中 在主线程中它工作得很好 但在以线程模块启动的线程中 通常excepthook叫做 这是一个显示问题的示例 取消注释该注释会显示所需的行为 import thre
  • 带图像的 SVG 进度条

    我正在尝试使用 SVG 创建进度条 弧 我目前的进度条正在工作 它正在使用存储在数据属性中的值移动所需的量 并且看起来相当不错 虽然我试图让图像随着酒吧的弧线移动 图像应从 0 开始 并移动到完成点 例如 50 即位于顶部 div clas
  • 如何创建一个从 NSWindow 模态弹出的 NSPanel(Cocoa 编程)

    就像在 NSWindow 中单击按钮后显示的 NSPanel 一样 我查了很多 但没有简单的例子 谢谢你的帮助 可以这样做 IBAction showButtonAction id sender NSApplication sharedAp
  • Chrome 浏览器开发者工具:脚本多次出现

    当使用 Chrome 的开发者工具调试 Javascript 时 当我更改 重新加载 测试代码时 脚本 列表往往会添加每个脚本的多次出现 Safari 使用相同的基本工具集 但不这样做 某个脚本在此列表中出现 10 次并不陌生 发生这种情况
  • 使用新数据重新加载 ngx-graph

    我正在尝试泳道 ngx graph 在我的应用程序中用户可以删除或添加节点 根据删除或添加操作 我将相应地更新我的数据 现在真正的问题是如何在不刷新整个页面的情况下刷新图表 您可以使用以下方法更新它update 图表的选项 HTML
  • ASP.NET MVC3 部分视图命名约定

    我是 MVC 开发的新手 所以请耐心等待 真的有必要将我的部分视图命名为 Action cshtml 与 下划线 以遵守命名约定 这是我的问题我有一个控制器 StudentController 和一个操作 List 它有一个名为 List
  • 将多个正则表达式合并为一个

    我正在尝试编写一个代码将字符串连接成拉丁诗句 我已经处理了一些限制 但是我没有得到所需的输出 我的代码如下
  • Swift:标准数组的二分搜索?

    我有一个排序数组 想对其进行二分搜索 所以我问 Swift 库中是否已经有一些东西可以使用 比如排序等 或者是否有可用的类型无关版本 当然我可以自己写 但我喜欢避免再次重新发明轮子 这是我最喜欢的二分搜索实现 它不仅对于查找元素很有用 而且
  • 类型错误:$(...).selectize 不是函数

    我将 selectize rails gem 安装到了我的 Rails 应用程序中 并且正在尝试使其正常工作 我的网络控制台中不断出现此错误 TypeError selectize is not a function 并且浏览器中没有任何反
  • 使用 xcodebuild 构建等待 /"runContextManager.runContexts" 超时

    我正在设置我的 iphone 项目以与 hudson 一起运行 我的构建脚本在本地运行良好 但是当在我的雪豹服务器 mac 上执行以下命令时 xcodebuild sdk iphoneos4 3 workspace Moments xcwo
  • 单击闪亮的操作按钮后将光标聚焦在文本区域

    无论如何 我都不是 html 或 JavaScript 方面的专家 因此 我希望您能就这个问题得到帮助 我认为我应该提供应用程序的较小版本 以便能够解释问题 这是一个简单应用程序的 app R 它允许用户在文本区域中写入一个单词 单词的第一
  • Laravel 5 Dotenv 用于特定子域

    我的 laravel 5 应用程序中有几个子域 每个子域都有特定的配置 如 mail nocaptcha 等 如何设置 env 文件以与我的特定子域一起使用 是的 您可以使用单独的 env每个子域的文件 因此如果您在配置中使用环境变量 它将
  • 在 R 中的 dplyr 中分组一些其他变量后,如何保留其他变量?

    之前今天我发布了这个问题here https stackoverflow com questions 72461943 how can i add missing month value and remove duplicate in dp
  • nginx+uwsgi+django,uwsgi中似乎有一些奇怪的缓存,帮帮我

    这是 uwsgi 配置 uwsgi uid 500 listen 200 master true profiler true processes 8 logdate true socket 127 0 0 1 8000 module www
  • C#中小时和分钟的时间跨度计算

    最终结果应向用户显示开始时间和结束时间之间的时间跨度 例如 早上 06 30 开始工作 晚上 18 30 结束 显示的结果应为 12 小时 现在 我必须DateTime参数 从时间和到时间 每个DateTime参数具有 24 小时格式的小时
  • 使用 JPA 跟踪历史记录

    我想通过使用一个新表来存储日志 其中包含进行更改的用户 日期以及每次更新 插入中发生的任何更改 从而为我的模型实体之一实现历史记录跟踪 审核 我使用 EclipseLink 作为我的 JPA 提供程序 但我不想使用它历史政策 http wi
  • System.web.mvc 缺失

    我们有一个旧的 ASP NET MVC 3 Web 应用程序 在 VS2010 中构建 自上周的安全更新以来无法编译 问题在于对 System Web Mvc dll 的引用已损坏 当我在尚未运行安全更新的构建计算机上打开解决方案文件 并打
  • 重写 Spring Data Rest 请求映射

    我们目前有一个level 2 http martinfowler com articles richardsonMaturityModel htmlRESTful Web 服务 我们正在更新该服务以纳入超媒体支持 我们在后端使用 Sprin