Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何自定义SpringDataREST以使用存储库资源的多段路径?_Java_Spring_Spring Mvc_Spring Boot_Spring Data Rest - Fatal编程技术网

Java 如何自定义SpringDataREST以使用存储库资源的多段路径?

Java 如何自定义SpringDataREST以使用存储库资源的多段路径?,java,spring,spring-mvc,spring-boot,spring-data-rest,Java,Spring,Spring Mvc,Spring Boot,Spring Data Rest,我正在使用SpringDataJPA和SpringDataREST开发一个基于组件的CRUD应用程序。我有几个组件。例如,系统组件具有用户模型和用户存储库。组件由包名称区分。比如com.example.app. 因此,为了使我的RESTAPI看起来更干净,我需要实现API URL,如下所示 主机:8080/ 比如说 主机:8080/系统/用户 我在我的存储库中执行了以下操作 @RepositoryRestResource(collectionResourceRel = "users", path

我正在使用SpringDataJPA和SpringDataREST开发一个基于组件的CRUD应用程序。我有几个组件。例如,系统组件具有
用户
模型和
用户存储库
。组件由包名称区分。比如
com.example.app.

因此,为了使我的RESTAPI看起来更干净,我需要实现API URL,如下所示

主机:8080/

比如说

主机:8080/系统/用户

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

@RepositoryRestResource(collectionResourceRel = "users", path = "system/users")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
   ...
}
但是当我转到
http://localhost:8080/system/users

它给出了一个错误

2015年5月22日星期五17:56:37发生意外错误(类型=非 已找到,状态为404)。没有可用的消息

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

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

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

tl;博士 不支持

细节 一般来说:不要专注于设计URL。URI的结构对REST客户机的定义不重要:

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

(摘自罗伊·菲尔丁-建筑风格和风格) 基于网络的软件体系结构设计——)

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

也就是说,您正在查找的内容目前不受支持。如果您认为添加此功能是值得的(由于上面给出的论点,我认为不值得),请随时在我们的网站上打开一张罚单


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

谢谢您的回答。但这不是我试图改变的基本URL。我只需在spring boot中的
application.properties
文件中添加一个
spring.data.rest.baseUri=api即可。我需要在我试图公开为rest链接的路径中使用斜杠。或者是否有任何方法可以为我的每个组件的rest数据使用多个基本URI。因此,您的目标是提供两个restful端点(组件A和B,如“系统”),每个端点下可能有多个存储库(repA1、repA2,…,如“用户”)。。?组件本身是否包含任何逻辑,或者它只是构造应用程序的一种方式?刚刚找到另一个stackoverflow帖子。我认为这一点与您的类似,但没有提供解决方案:再次感谢您所付出的努力。组件有自己的逻辑。我有一些组件,如
系统(核心框架)
分销
财务
人力资源
等。。春天不让我达到我想做的事。似乎我不得不放弃spring数据rest,转而做其他事情。你的论点似乎有效,但这并不能解决我的问题。我正在做一项技术可行性研究,以开发一个类似ERP的大型多组件应用程序。无论如何,感谢您为回答这个问题所花费的时间和精力。如果可能的话,请考虑在未来版本中修复这一点,因为它可能会帮助像我这样的人。我在Jira中创建了一个问题,在这种情况下,Spring Data Rest不适合API版本控制吗?@IllSc您可以通过应用程序.properties中的Spring.Data.Rest.base-path属性修改基本路径来版本化API。@MiguelPereira这不是一个好的解决方案,因为如果您更改基本路径,您的最后一个路径将不再有效。使用API版本控制的原因是能够同时交付多个版本。@Felipedsiderati我为每个新版本使用了一个新的Spring Boot应用程序。依赖于共享模块。因此,所有API版本都可以正常工作:)。还有一些额外的好处,比如干净的代码、独立的扩展和每个版本的开发。爱春天,但在下一个项目中可能会有新的东西。启动时间慢=公共云中的高运营成本。
{
   "_links": {
   "users": {
   "href": "http://localhost:8080/system/users{?page,size,sort}",
    "templated": true
},
...