我正在使用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
,它会中断并给出错误。
答案 0 :(得分:13)
不支持。
一般来说:不要专注于设计网址。根据定义,URI的结构对REST客户端无关紧要:
服务器或客户端软件在任何时候都不需要知道或理解URI的含义 - 它们只是作为一个管道,资源的创建者(人类命名机构)可以通过该管道将表示与语义相关联由URI标识。
(来自Roy Fielding - 建筑风格和建筑风格) 基于网络的软件架构设计 - Section 6.2.4)
如果您遵循该标准,您将负责选择关系名称,设计您公开的资源的表示等。
那就是说,你目前所寻找的东西目前都不受支持。如果您认为添加此功能是值得的(我认为不是,由于上面给出的论点),请随意在bug tracker中打开一张票。
由于Spring MVC映射的工作方式,实现起来可能非常棘手,尤其是奇异路径段和非奇异路径段的映射组合可能会导致一些歧义。所有这些都使得该请求不太可能得到跟进。
答案 1 :(得分:1)
我认为这个(或类似的)问题已经在stackoverflow上回答here。
使用自定义RepositoryRestMvcConfiguration类设置基本uri。