7.1 使用 RestTemplate 调用 REST 端点

从客户的角度来看,与 REST 资源进行交互需要做很多工作 —— 主要是单调乏味的样板文件。使用低级 HTTP 库,客户端需要创建一个客户端实例和一个请求对象,执行请求,解释响应,将响应映射到域对象,并处理过程中可能抛出的任何异常。不管发送什么 HTTP 请求,所有这些样板文件都会重复。

为了避免这样的样板代码,Spring 提供了 RestTemplate。正如 JDBCTemplate 处理使用 JDBC 糟糕的那部分一样,RestTemplate 使你不必为调用 REST 资源而做单调的工作。

RestTemplate 提供了 41 个与 REST 资源交互的方法。与其检查它提供的所有方法,不如只考虑 12 个惟一的操作,每个操作都有重载,以形成 41 个方法的完整集合。表 7.1 描述了 12 种操作。

表 7.1 RestTemplate 定义的 12 个唯一操作

方法 描述
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 头信息
patchForObject(...) 发送 HTTP PATCH 请求,返回从响应主体映射的结果对象
postForEntity(...) 将数据 POST 到一个 URL,返回一个 ResponseEntity,其中包含从响应体映射而来的对象
postForLocation(...) 将数据 POST 到一个 URL,返回新创建资源的 URL
postForObject(...) 将数据 POST 到一个 URL,返回从响应主体映射的对象
put(...) 将资源数据 PUT 到指定的URL

除了 TRACE 之外,RestTemplate 对于每个标准 HTTP 方式至少有一个方法。此外,execute() 和 exchange() 为使用任何 HTTP 方式发送请求提供了低层的通用方法。表 7.1 中的大多数方法都被重载为三种方法形式:

  • 一种是接受一个 String 作为 URL 规范,在一个变量参数列表中指定 URL 参数。
  • 一种是接受一个 String 作为 URL 规范,其中的 URL 参数在 Map<String, String> 中指定。
  • 一种是接受 java.net.URI 作为 URL 规范,不支持参数化 URL。

一旦了解了 RestTemplate 提供的 12 个操作以及每种变体的工作方式,就可以很好地编写调用资源的 REST 客户端了。

要使用 RestTemplate,需要创建一个实例:

RestTemplate rest = new RestTemplate();

或是将它声明为一个 bean,在需要它的时候将其注入:

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

让我们通过查看支持四种主要 HTTP 方法(GET、PUT、DELETE 和 POST)的操作来探寻 RestTemplate 的操作。我们将从 getForObject() 和 getForEntity() —— GET 方法开始。

results matching ""

    No results matching ""