> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v4/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v4/di-16-zhang-shi-yong-spring-mvc-chuang-jian-rest-api/untitled-1/untitled-9.md).

# 16.4.1　了解 RestTemplate 的操作

RestTemplate 定义了 36 个与 REST 资源交互的方法，其中的大多数都对应于 HTTP 的方法。但是，在本章中我没有足够的篇幅涵盖所有的 36 个方法。其实，这里面只有 11 个独立的方法，其中有十个有三种重载形式，而第十一个则重载了六次，这样一共形成了 36 个方法。表 16.2 描述了 RestTemplate 所提供的 11 个独立方法。除了 TRACE 以外，RestTemplate 涵盖了所有的 HTTP 动作。除此之外，execute() 和 exchange() 提供了较低层次的通用方法来使用任意的 HTTP 方法。

表 16.2 中的大多数操作都以三种方法的形式进行了重载：

* 一个使用 java.net.URI 作为 URL 格式，不支持参数化 URL；
* 一个使用 String 作为 URL 格式，并使用 Map 指明 URL 参数；
* 一个使用 String 作为 URL 格式，并使用可变参数列表指明 URL 参数。

明确了 RestTemplate 所提供的 11 个操作以及各个变种如何工作之后，你就能以自己的方式编写使用 REST 资源的客户端了。我们通过对四个主要 HTTP 方法的支持（也就是 GET、PUT、DELETE 和 POST） 来研究 RestTemplate 的操作。我们从 GET 方法的 getForObject() 和 getForEntity() 开始。

| 方法                | 描述                                                          |
| ----------------- | ----------------------------------------------------------- |
| delete()          | 在特定的 URL 上对资源执行 HTTP DELETE 操作                              |
| exchange()        | 在 URL 上执行特定的 HTTP 方法，返回包含对象的 ResponseEntity，这个对象是从响应体中映射得到的 |
| execute()         | 在 URL 上执行特定的 HTTP 方法，返回一个从响应体映射得到的对象                        |
| getForEntity()    | 发送一个 HTTP GET 请求，返回的 ResponseEntity 包含了响应体所映射成的对象           |
| getForObject()    | 发送一个 HTTP GET 请求，返回的请求体将映射为一个对象                             |
| headForHeaders()  | 发送 HTTP HEAD 请求，返回包含特定资源 URL 的 HTTP 头                       |
| optionsForAllow() | 发送 HTTP OPTIONS 请求，返回对特定 URL 的 Allow 头信息                    |
| postForEntity()   | POST 数据到一个 URL，返回包含一个对象的 ResponseEntity，这个对象是从响应体中映射得到的     |
| postForLocation() | POST 数据到一个 URL，返回新创建资源的 URL                                 |
| postForObject()   | POST 数据到一个 URL，返回根据响应体匹配形成的对象 put() PUT 资源到特定的 URL          |
