此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data REST 4.4.0spring-doc.cadn.net.cn

存储库资源

基础

Spring Data REST 的核心功能是导出 Spring Data 存储库的资源。因此,要查看并可能自定义导出工作方式的核心工件是 repository 接口。请考虑以下存储库接口:spring-doc.cadn.net.cn

public interface OrderRepository extends CrudRepository<Order, Long> { }

对于此存储库, Spring Data REST 在/orders.该路径派生自所管理的域类的未大写、复数、简单的类名。它还为 URI 模板下存储库管理的每个项目公开一个项目资源/orders/{id}.spring-doc.cadn.net.cn

默认情况下,与这些资源交互的 HTTP 方法映射到CrudRepository.在集合资源项目资源部分阅读更多相关信息。spring-doc.cadn.net.cn

存储库方法公开

为特定存储库公开哪些 HTTP 资源主要由存储库的结构驱动。 换句话说,资源公开将遵循您在仓库中公开的方法。 如果您扩展CrudRepository您通常会公开公开默认情况下我们可以注册的所有 HTTP 资源所需的所有方法。 下面列出的每个资源都将定义需要存在哪些方法,以便可以为每个资源公开特定的 HTTP 方法。 这意味着,不公开这些方法的存储库 — 要么根本不声明它们,要么显式使用@RestResource(exported = false)— 不会在这些资源上公开这些 HTTP 方法。spring-doc.cadn.net.cn

有关如何单独调整默认方法、公开或专用 HTTP 方法的详细信息,请参阅自定义支持的 HTTP 方法spring-doc.cadn.net.cn

默认状态代码

对于公开的资源,我们使用一组默认状态代码:spring-doc.cadn.net.cn

  • 200 OK:对于普通GET请求。spring-doc.cadn.net.cn

  • 201 Created:为POSTPUT创建新资源的请求。spring-doc.cadn.net.cn

  • 204 No Content:为PUT,PATCHDELETE请求数(当配置设置为不返回资源更新的响应正文 (RepositoryRestConfiguration.setReturnBodyOnUpdate(…)). 如果配置值设置为包括PUT,200 OK返回以进行更新,并且201 Created对于通过PUT.spring-doc.cadn.net.cn

如果配置值 (RepositoryRestConfiguration.returnBodyOnUpdate(…)RepositoryRestConfiguration.returnBodyCreate(…)) 显式设置为null— 默认情况下,它们都是 HTTP Accept 标头--,用于确定响应代码。 在 collectionitem 资源的详细说明中阅读更多相关信息。spring-doc.cadn.net.cn

资源可发现性

HATEOAS 的一个核心原则是,应该通过发布指向可用资源的链接来发现资源。关于如何在 JSON 中表示链接,存在一些相互竞争的事实标准。默认情况下,Spring Data REST 使用 HAL 来呈现响应。HAL 定义要包含在返回文档的属性中的链接。spring-doc.cadn.net.cn

资源发现从应用程序的顶层开始。通过向部署 Spring Data REST 应用程序的根 URL 发出请求,客户端可以从返回的 JSON 对象中提取一组链接,这些链接表示客户端可用的下一级别资源。spring-doc.cadn.net.cn

例如,要发现应用程序根目录中可用的资源,请发出 HTTPGET添加到根 URL,如下所示:spring-doc.cadn.net.cn

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 中指定的嵌套链接对象。spring-doc.cadn.net.cn

有关profile链接,请参阅 应用程序级配置文件语义 (ALPS)。

集合资源

Spring Data REST 公开了一个集合资源,该集合资源以导出的存储库正在处理的域类的未大写复数版本命名。资源名称和路径都可以使用@RepositoryRestResource在 repository 界面上。spring-doc.cadn.net.cn

支持的 HTTP 方法

集合资源同时支持GETPOST.所有其他 HTTP 方法都会导致405 Method Not Allowed.spring-doc.cadn.net.cn

GET

返回存储库服务器通过其findAll(…)方法。 如果存储库是分页存储库,我们会根据需要包含分页链接和其他页面元数据。spring-doc.cadn.net.cn

用于调用的方法

如果存在,则使用以下方法(降序):spring-doc.cadn.net.cn

有关方法的默认公开的更多信息,请参阅存储库方法公开spring-doc.cadn.net.cn

参数

如果存储库具有分页功能,则资源采用以下参数:spring-doc.cadn.net.cn

自定义状态代码

GETmethod 只有一个自定义状态代码:spring-doc.cadn.net.cn

  • 405 Method Not Allowed:如果findAll(…)方法未导出(通过@RestResource(exported = false)) 或不存在于存储库中。spring-doc.cadn.net.cn

支持的媒体类型

GETmethod 支持以下媒体类型:spring-doc.cadn.net.cn

GETmethod 支持用于发现相关资源的单个链接:spring-doc.cadn.net.cn

HEAD

HEADmethod 返回集合资源是否可用。它没有状态代码、媒体类型或相关资源。spring-doc.cadn.net.cn

用于调用的方法

如果存在,则使用以下方法(降序):spring-doc.cadn.net.cn

有关方法的默认公开的更多信息,请参阅存储库方法公开spring-doc.cadn.net.cn

POST

POSTmethod 从给定的请求正文创建新实体。 默认情况下,响应是否包含 body 由Accept标头。 如果发送了响应正文,则会创建一个响应正文。 否则,响应正文为空,可以通过Location响应标头。 可以通过配置RepositoryRestConfiguration.setReturnBodyOnCreate(…)因此。spring-doc.cadn.net.cn

用于调用的方法

如果存在,则使用以下方法(降序):spring-doc.cadn.net.cn

有关方法的默认公开的更多信息,请参阅存储库方法公开spring-doc.cadn.net.cn

自定义状态代码

POSTmethod 只有一个自定义状态代码:spring-doc.cadn.net.cn

  • 405 Method Not Allowed:如果save(…)方法未导出(通过@RestResource(exported = false)) 或根本不存在于存储库中。spring-doc.cadn.net.cn

支持的媒体类型

POSTmethod 支持以下媒体类型:spring-doc.cadn.net.cn

Item 资源

Spring Data REST 将单个集合项的资源公开为集合资源的子资源。spring-doc.cadn.net.cn

支持的 HTTP 方法

项目资源通常支持GET,PUT,PATCHDELETE,除非显式配置阻止(有关详细信息,请参阅“关联资源”)。spring-doc.cadn.net.cn

获取

GETmethod 返回单个实体。spring-doc.cadn.net.cn

用于调用的方法

如果存在,则使用以下方法(降序):spring-doc.cadn.net.cn

有关方法的默认公开的更多信息,请参阅存储库方法公开spring-doc.cadn.net.cn

自定义状态代码

GETmethod 只有一个自定义状态代码:spring-doc.cadn.net.cn

  • 405 Method Not Allowed:如果findOne(…)方法未导出(通过@RestResource(exported = false)) 或不存在于存储库中。spring-doc.cadn.net.cn

支持的媒体类型

GETmethod 支持以下媒体类型:spring-doc.cadn.net.cn

对于域类型的每个关联,我们都会公开以 association 属性命名的链接。您可以使用@RestResource在物业上。相关资源为 association 资源类型。spring-doc.cadn.net.cn

HEAD

HEADmethod 返回 item 资源是否可用。它没有状态代码、媒体类型或相关资源。spring-doc.cadn.net.cn

用于调用的方法

如果存在,则使用以下方法(降序):spring-doc.cadn.net.cn

有关方法的默认公开的更多信息,请参阅存储库方法公开spring-doc.cadn.net.cn

PUT

PUTmethod 将 target 资源的状态替换为提供的请求正文。 默认情况下,响应是否包含 body 由Accept标头。 如果存在请求标头,则响应正文和状态代码200 OK返回。 如果不存在标头,则响应正文为空,并且成功的请求将返回204 No Content. 可以通过配置RepositoryRestConfiguration.setReturnBodyOnUpdate(…)因此。spring-doc.cadn.net.cn

用于调用的方法

如果存在,则使用以下方法(降序):spring-doc.cadn.net.cn

有关方法的默认公开的更多信息,请参阅存储库方法公开spring-doc.cadn.net.cn

自定义状态代码

PUTmethod 只有一个自定义状态代码:spring-doc.cadn.net.cn

  • 405 Method Not Allowed:如果save(…)方法未导出(通过@RestResource(exported = false)) 或根本不存在于存储库中。spring-doc.cadn.net.cn

支持的媒体类型

PUTmethod 支持以下媒体类型:spring-doc.cadn.net.cn

PATCH

PATCH方法类似于PUT方法,但会部分更新 resources 状态。spring-doc.cadn.net.cn

用于调用的方法

如果存在,则使用以下方法(降序):spring-doc.cadn.net.cn

有关方法的默认公开的更多信息,请参阅存储库方法公开spring-doc.cadn.net.cn

自定义状态代码

PATCHmethod 只有一个自定义状态代码:spring-doc.cadn.net.cn

  • 405 Method Not Allowed:如果save(…)方法未导出(通过@RestResource(exported = false)) 或不存在于存储库中。spring-doc.cadn.net.cn

DELETE

DELETEmethod 删除公开的资源。 默认情况下,响应是否包含 body 由Accept标头。 如果存在请求标头,则响应正文和状态代码200 OK返回。 如果不存在标头,则响应正文为空,并且成功的请求将返回204 No Content. 可以通过配置RepositoryRestConfiguration.setReturnBodyOnDelete(…)因此。spring-doc.cadn.net.cn

用于调用的方法

如果存在,则使用以下方法(降序):spring-doc.cadn.net.cn

有关方法的默认公开的更多信息,请参阅存储库方法公开spring-doc.cadn.net.cn

自定义状态代码

DELETEmethod 只有一个自定义状态代码:spring-doc.cadn.net.cn

  • 405 Method Not Allowed:如果delete(…)方法未导出(通过@RestResource(exported = false)) 或不存在于存储库中。spring-doc.cadn.net.cn

关联资源

Spring Data REST 为项目资源具有的每个关联公开每个项目资源的子资源。资源的名称和路径默认为 association 属性的名称,可以使用@RestResource在 association 属性上。spring-doc.cadn.net.cn

支持的 HTTP 方法

关联资源支持以下媒体类型:spring-doc.cadn.net.cn

GET

GETmethod 返回 association 资源的状态。spring-doc.cadn.net.cn

支持的媒体类型

GETmethod 支持以下媒体类型:spring-doc.cadn.net.cn

PUT

PUT方法将给定 URI 指向的资源绑定到关联资源(请参阅支持的媒体类型)。spring-doc.cadn.net.cn

自定义状态代码

PUTmethod 只有一个自定义状态代码:spring-doc.cadn.net.cn

支持的媒体类型

PUT方法仅支持一种媒体类型:spring-doc.cadn.net.cn

POST

POSTmethod 仅支持集合关联。它会向集合中添加一个新元素。spring-doc.cadn.net.cn

支持的媒体类型

POST方法仅支持一种媒体类型:spring-doc.cadn.net.cn

DELETE

DELETE方法解除关联。spring-doc.cadn.net.cn

自定义状态代码

POSTmethod 只有一个自定义状态代码:spring-doc.cadn.net.cn

搜索资源

搜索资源返回存储库公开的所有查询方法的链接。查询方法资源的路径和名称可以使用@RestResource在 method 声明上。spring-doc.cadn.net.cn

支持的 HTTP 方法

由于搜索资源是只读资源,因此仅支持GET方法。spring-doc.cadn.net.cn

GET

GETmethod 返回指向各个查询方法资源的链接列表。spring-doc.cadn.net.cn

支持的媒体类型

GETmethod 支持以下媒体类型:spring-doc.cadn.net.cn

对于存储库中声明的每个查询方法,我们都会公开一个查询方法资源。如果资源支持分页,则指向它的 URI 是包含分页参数的 URI 模板。spring-doc.cadn.net.cn

HEAD

HEADmethod 返回搜索资源是否可用。404 返回代码表示没有可用的查询方法资源。spring-doc.cadn.net.cn

Query Method 资源

查询方法资源通过存储库界面上的单个查询方法运行公开的查询。spring-doc.cadn.net.cn

支持的 HTTP 方法

由于 query method 资源是只读资源,因此它支持GET只。spring-doc.cadn.net.cn

GET

GETmethod 返回查询结果。spring-doc.cadn.net.cn

参数

如果查询方法具有分页功能(在指向资源的 URI 模板中指示),则该资源采用以下参数:spring-doc.cadn.net.cn

支持的媒体类型

GETmethod 支持以下媒体类型:spring-doc.cadn.net.cn

HEAD

HEADmethod 返回查询方法资源是否可用。spring-doc.cadn.net.cn