如何自定义Spring Data REST以使用存储库资源的多段路径?

时间:2015-05-22 12:38:37

标签: java spring spring-mvc spring-boot spring-data-rest

我正在使用Spring Data JPA和Spring Data REST开发基于组件的CRUD应用程序。我有几个组件。例如,系统组件具有User模型和UserRepository。组件由包名称区分。比如com.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

它出错

  

Fri May 22 17:56:37 IST 2015出现意外错误(type = Not   找到了,状态= 404)。没有可用的消息

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

2 个答案:

答案 0 :(得分:13)

TL;博士

不支持。

详细

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

  

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

(来自Roy Fielding - 建筑风格和建筑风格) 基于网络的软件架构设计 - Section 6.2.4

如果您遵循该标准,您将负责选择关系名称,设计您公开的资源的表示等。

那就是说,你目前所寻找的东西目前都不受支持。如果您认为添加此功能是值得的(我认为不是,由于上面给出的论点),请随意在bug tracker中打开一张票。

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

答案 1 :(得分:1)

我认为这个(或类似的)问题已经在stackoverflow上回答here

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