如何自定义Spring Data REST以对存储库资源使用多段路径?tl;博士详

我正在使用Spring Data JPA和Spring Data REST开发一个基于组件的CRUD应用程序。我有几个组件。例如,系统组件具有模型和 .组件因包名称而异。喜欢UserUserRepositorycom.example.app.<component_name>

因此,为了使我的REST API看起来更清晰,我需要实现API URL,如下所示。

host:8080/<component_name>/<model_collection_name>

例如

host:8080/system/users

我在我的存储库中做了以下操作

@RepositoryRestResource(collectionResourceRel = "users", path = "system/users")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
   ...
}

这生成以下内容,当我转到http://localhost:8080

{
   "_links": {
   "users": {
   "href": "http://localhost:8080/system/users{?page,size,sort}",
    "templated": true
},
...

但是当我转到时http://localhost:8080/system/users

它给出了一个错误

星期五 五月 22 17:56:37 IST 2015 出现意外错误(类型=未找到,状态=404)。没有可用的消息

注意:如果我将路径映射到,那么它工作正常,但是当我在路径中使用a时,例如,它会中断并给出错误。system-users/system/users


答案 1

tl;博士

不支持。

一般来说:不要专注于设计URL。根据定义,URI 的结构对 REST 客户端无关紧要:

在任何时候,服务器或客户端软件都不需要知道或理解URI的含义 - 它们只是充当一个渠道,通过该渠道,资源的创建者(人类命名机构)可以将表示与URI标识的语义相关联。

(摘自 Roy Fielding - 架构风格和基于网络的软件架构的设计 - 第 6.2.4 节)

如果遵循该条件,则需要注意选择关系名称,为公开的资源设计表示法等。

也就是说,您正在寻找的内容目前不受支持。如果您认为添加此功能是值得的(由于上面给出的论点,我认为不值得),请随时在我们的错误跟踪器中打开票证。

由于Spring MVC映射的工作方式,实现起来可能非常棘手,特别是奇异路径段和非奇异路径段的映射的组合可能会导致一些歧义。所有这些使得这一请求不太可能得到跟进。


答案 2

我认为这个(或:一个类似的)问题已经在stackoverflow上得到了回答。

使用自定义的 RepositoryRestMvcConfiguration 类设置基本 uri。


推荐