📅  最后修改于: 2023-12-03 15:19:48.923000             🧑  作者: Mango
RestTemplate
是 Spring 提供的用于访问 RESTful 服务的客户端工具。它提供了一组简单而强大的方法,以执行 HTTP 请求并处理响应结果。
在本文中,我们将介绍 RestTemplate
的使用方法和一些实例代码。我们还将详细讨论 RestTemplate
的各种功能,如请求和响应处理,错误处理和拦截器。
要使用 RestTemplate
,我们需要首先获取它的一个实例。最简单的方式是使用默认构造函数:
RestTemplate restTemplate = new RestTemplate();
由于 RestTemplate
是线程安全的,因此我们可以在多个线程中共享同一个实例。如果需要在创建实例后更改默认配置,您可以使用 RestTemplateBuilder
。
RestTemplate restTemplate = new RestTemplateBuilder()
.rootUri("http://localhost:8080")
.basicAuthentication("user", "password").build();
我们可以使用 RestTemplate
的方法发送 HTTP 请求:
String result = restTemplate.getForObject("http://example.com/hello", String.class);
上述代码会向 http://example.com/hello
发送一个 GET 请求,并返回响应的字符串。
RestTemplate
还提供了其他方法用于发送 POST、PUT、PATCH、DELETE 等请求,以及发送带有请求体的请求。
RestTemplate
提供了多种方法来处理响应。下面是一些示例:
// 获取字节数组
byte[] result = restTemplate.getForObject("http://example.com/hello", byte[].class);
// 获取输入流
InputStream result = restTemplate.getForObject("http://example.com/hello", InputStream.class);
// 获取字符串
String result = restTemplate.getForObject("http://example.com/hello", String.class);
// 获取 JSON 对象
JsonNode result = restTemplate.getForObject("http://example.com/hello", JsonNode.class);
// 获取自定义类型
MyObject result = restTemplate.getForObject("http://example.com/hello", MyObject.class);
RestTemplate
允许我们添加自定义的拦截器,在请求和响应处理过程中进行额外的操作。例如,可以使用拦截器来记录请求和响应的日志,或添加认证令牌。
RestTemplate restTemplate = new RestTemplateBuilder()
.additionalInterceptors(new MyInterceptor()).build();
MyInterceptor
是自定义拦截器的类名。它必须实现 ClientHttpRequestInterceptor
接口。
当服务器返回错误响应时,RestTemplate
提供了多种方法来处理错误:
try {
ResponseEntity<MyObject> response = restTemplate.getForEntity("http://example.com/hello", MyObject.class);
MyObject body = response.getBody();
} catch (HttpClientErrorException e) {
// 处理 HTTP 4xx 错误
String responseBody = e.getResponseBodyAsString();
HttpHeaders headers = e.getResponseHeaders();
} catch (HttpServerErrorException e) {
// 处理 HTTP 5xx 错误
String responseBody = e.getResponseBodyAsString();
HttpHeaders headers = e.getResponseHeaders();
} catch (ResourceAccessException e) {
// 处理网络错误
} catch (Exception e) {
// 处理其他错误
}
我们还可以为错误响应配置自定义的错误处理器:
RestTemplate restTemplate = new RestTemplateBuilder()
.errorHandler(new MyErrorHandler()).build();
MyErrorHandler
是自定义错误处理器的类名。它必须实现 ResponseErrorHandler
接口。
RestTemplate
是一个非常有用的工具,用于与 RESTful 服务交互。它提供了许多常用的方法来发送请求和处理响应。我们可以使用默认实例或自定义实例来配置请求和响应处理。我们还可以添加拦截器和错误处理器,以扩展其功能。