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

Far*_*ook 11 java spring spring-mvc 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> {
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

{
   "_links": {
   "users": {
   "href": "http://localhost:8080/system/users{?page,size,sort}",
    "templated": true
},
...
Run Code Online (Sandbox Code Playgroud)

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

它给出了一个错误

5月22日星期五17:56:37 IST 2015出现意外错误(type = Not Found,status = 404).没有可用的消息

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

Oli*_*ohm 14

TL;博士

不支持.

细节

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

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

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

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

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

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

  • 在那种情况下,Spring Data Rest 不适合 API 版本控制吗? (4认同)