我们目前有一个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(使用前将#替换为@)