此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data REST 4.5.3! |
存储库资源
基础
Spring Data REST 的核心功能是导出 Spring Data 存储库的资源。因此,要查看并可能自定义导出工作方式的核心工件是存储库接口。考虑以下存储库接口:
public interface OrderRepository extends CrudRepository<Order, Long> { }
对于此存储库,Spring Data REST 公开了/orders
. 该路径派生自所管理的域类的不大写、复数、简单类名。它还为 URI 模板下存储库管理的每个项目公开一个项目资源/orders/{id}
.
存储库方法暴露
为某个仓库公开哪些 HTTP 资源主要由仓库的结构驱动。换句话说,资源暴露将遵循您在仓库上公开的方法。如果您扩展CrudRepository
您通常会公开公开我们默认可以注册的所有 HTTP 资源所需的所有方法。下面列出的每个资源都将定义哪些方法需要存在,以便可以为每个资源公开特定的 HTTP 方法。这意味着,没有公开这些方法的存储库——要么根本不声明它们,要么显式使用@RestResource(exported = false)
— 不会在这些资源上公开这些 HTTP 方法。
有关如何单独调整默认方法公开或专用 HTTP 方法的详细信息,请参阅自定义支持的 HTTP 方法。
默认状态代码
对于公开的资源,我们使用一组默认状态代码:
-
200 OK
:对于素色GET
请求。 -
201 Created
:为POST
和PUT
创建新资源的请求。 -
204 No Content
:为PUT
,PATCH
和DELETE
当配置设置为不返回资源更新的响应正文时的请求(RepositoryRestConfiguration.setReturnBodyOnUpdate(…)
). 如果配置值设置为包括PUT
,200 OK
返回更新,并且201 Created
对于通过PUT
.
资源可发现性
HATEOAS 的一个核心原则是,应该通过发布指向可用资源的链接来发现资源。关于如何在 JSON 中表示链接,有一些相互竞争的事实上的标准。默认情况下,Spring Data REST 使用 HAL 来呈现响应。HAL 定义了要包含在返回文档的属性中的链接。
资源发现从应用程序的顶层开始。通过向部署 Spring Data REST 应用程序的根 URL 发出请求,客户端可以从返回的 JSON 对象中提取一组链接,这些链接表示客户端可用的下一级资源。
例如,要发现应用程序根目录下有哪些资源可用,请发出 HTTPGET
到根 URL,如下所示:
curl -v http://localhost:8080/
< HTTP/1.1 200 OK
< Content-Type: application/hal+json
{ "_links" : {
"orders" : {
"href" : "http://localhost:8080/orders"
},
"profile" : {
"href" : "http://localhost:8080/api/alps"
}
}
}
结果文档的属性是一个对象,该对象由表示关系类型的键组成,具有 HAL 中指定的嵌套链接对象。
有关profile 链接,请参阅应用程序级配置文件语义 (ALPS)。 |
集合资源
Spring Data REST 公开了一个集合资源,该资源以导出的存储库正在处理的域类的不大写、复数版本命名。资源的名称和路径都可以使用@RepositoryRestResource
在存储库界面上。
支持的 HTTP 方法
集合资源同时支持GET
和POST
.所有其他 HTTP 方法都会导致405 Method Not Allowed
.
GET
通过其返回存储库服务器的所有实体findAll(…)
方法。
如果存储库是分页存储库,我们将在必要时包含分页链接和其他页面元数据。
参数
如果存储库具有分页功能,则资源采用以下参数:
-
page
:要访问的页码(索引为 0,默认为 0)。 -
size
:请求的页面大小(默认为 20)。 -
sort
:格式为($propertyname,)+[asc|desc]
?.
POST
这POST
方法从给定的请求正文创建一个新实体。
默认情况下,响应是否包含正文由Accept
标头。
如果发送了一个,则会创建一个响应正文。
如果没有,则响应正文为空,可以通过以下链接获取所创建资源的表示形式Location
response 标头。
可以通过配置RepositoryRestConfiguration.setReturnBodyOnCreate(…)
因此。
项目资源
Spring Data REST 将单个集合项的资源公开为集合资源的子资源。
支持的 HTTP 方法
项目资源一般支持GET
,PUT
,PATCH
和DELETE
,除非显式配置阻止了这一点(有关详细信息,请参阅“关联资源”)。
获取
这GET
方法返回单个实体。
自定义状态代码
这GET
方法只有一个自定义状态代码:
-
405 Method Not Allowed
:如果findOne(…)
方法未导出(通过@RestResource(exported = false)
)或不存在于存储库中。
相关资源
对于域类型的每个关联,我们都会公开以关联属性命名的链接。您可以使用以下命令自定义此行为@RestResource
属性上。相关资源属于关联资源类型。
PUT
这PUT
方法将目标资源的状态替换为提供的请求正文。默认情况下,响应是否包含正文由Accept
标头。
如果存在请求标头,则响应正文和状态代码200 OK
被返回。
如果不存在标头,则响应正文为空,成功的请求返回状态204 No Content
.
可以通过配置RepositoryRestConfiguration.setReturnBodyOnUpdate(…)
因此。
PATCH
这PATCH
方法类似于PUT
方法,但会部分更新资源状态。
协会资源
搜索资源
搜索资源返回存储库公开的所有查询方法的链接。查询方法资源的路径和名称可以使用@RestResource
在方法声明上。
支持的 HTTP 方法
由于搜索资源是只读资源,因此它仅支持GET
方法。
GET
这GET
方法返回指向各个查询方法资源的链接列表。
相关资源
对于存储库中声明的每个查询方法,我们都会公开一个查询方法资源。如果资源支持分页,则指向它的 URI 是包含分页参数的 URI 模板。