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 个唯一操作
除了 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,需要创建一个实例:
或是将它声明为一个 bean,在需要它的时候将其注入:
让我们通过查看支持四种主要 HTTP 方法(GET、PUT、DELETE 和 POST)的操作来探寻 RestTemplate 的操作。我们将从 getForObject() 和 getForEntity() —— GET 方法开始。
方法
描述
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