一尘不染

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

spring-boot

我正在使用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

它给出了一个错误

IST 2015年5月22日17:56:37 Fri发生意外错误(类型=未找到,状态= 404)。无可用讯息

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


阅读 300

收藏
2020-05-30

共1个答案

一尘不染

tl; dr

不支持。

细节

一般而言:不要专注于设计URL。根据定义,URI的结构对于REST客户端一定不重要:

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

(摘自Roy
Fielding,《体系结构样式和基于网络的软件体系结构的设计》,第6.2.4节

如果遵循该标准,则需要选择关系名称,为您公开的资源设计表示形式等。

就是说,目前不支持您要查找的内容。如果您认为值得添加此功能(由于上述参数,我认为不是),请随时在我们的错误跟踪器中打开故障单

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

2020-05-30