我们目前有一个level 2 RESTful网络服务。我们正在更新服务以包含超媒体支持。我们在后端使用Spring Data Rest来处理HATEOAS属性的设置。我们遇到的问题是我们仍然需要支持我们的遗留API使用者,直到完成迁移,这意味着我们仍然需要支持没有HAL属性的响应,如“_links”和“_embedded”。
由于不值得解释的原因,我们无法通过URL版本控制解决此问题。我们需要能够将带有“application / json”的Accept标头的请求映射到我们的旧控制器,并让SDR使用“application / hal + json”处理任何请求。从本质上讲,我们希望使用SDR作为后备来处理专门请求HAL格式响应的API请求。
我在SDR documentation中看到了这段摘录:
我们注册一个只响应的自定义HandlerMapping实例 RepositoryRestController,仅当路径意味着要处理时 Spring Data REST。为了保留要处理的路径 由您的应用程序与Spring Data REST处理的应用程序分开, 此自定义HandlerMapping检查URL路径并检查是否 已以该名称导出存储库。如果有,它允许 请求由Spring Data REST处理。如果没有 以该名称导出的存储库,它返回null,这只是意味着 “让其他HandlerMapping实例尝试为此请求提供服务”。
配置Spring Data REST HandlerMapping order =(Ordered.LOWEST_PRECEDENCE - 100)这意味着它通常是 在映射URL路径和现有路径时,首先排队 应用程序永远不会有机会提供意味着的请求 对于存储库。例如,如果您在其下导出了存储库 名称“人”,然后是您的应用程序启动的所有请求 “/ person”将由Spring Data REST和您的 应用程序永远不会看到该请求。如果您的存储库是 然而,以不同的名称出口(如“人”) 对“/ people”的请求将转到Spring Data REST并请求 “/ person”将由您的申请处理。
这似乎意味着我们想要实现的目标是可能的,假设可以不同地配置HandlerMapping顺序。到目前为止,我还没能完成这项工作:
有没有办法正确配置HandlerMappings,以便我的自定义控制器获取优先级和SDR字段任何未专门映射到我的控制器的请求?