一、基本介绍
1,什么是 RestTemplate?
(1)RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种可以便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率。RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端。根据 Spring 官方文档介绍,在将来的版本中它可能会被弃用,因为他们已在 Spring 5 中引入了 WebClient 作为非阻塞式 Reactive HTTP 客户端。
(2)RestTemplate 定义了 36 个与 REST 资源交互的方法,其中的大多数都对应于 HTTP 的方法。
注意:
- 严格来说只有 11 个独立的方法,其中有 10 个有三种重载形式,而第 11 个则重载了 6 次,这样一共形成了 36 个方法。
- 实际上,由于 Post 操作的非幂等性,它几乎可以代替其他的 CRUD 操作。
- delete():这个方法是在特定的 URL 上对资源执行 HTTP DELETE 操作
- exchange():在 URL 上执行特定的 HTTP 方法,返回包含对象的 ResponseEntity,这个对象是从响应体中映射得到的
- execute():在 URL 上执行特定的 HTTP 方法,返回一个从响应体映射得到的对象
- getForEntity():发送一个 HTTP GET 请求,返回的 ResponseEntity 包含了响应体所映射成的对象
- getForObject():发送一个 HTTP GET 请求,返回的请求体将映射为一个对象
- postForEntity():POST 数据到一个 URL,返回包含一个对象的 ResponseEntity,这个对象是从响应体中映射得到的
- postForObject():POST 数据到一个 URL,返回根据响应体匹配形成的对象
- headForHeaders():发送 HTTP HEAD 请求,返回包含特定资源 URL 的 HTTP 头
- optionsForAllow():发送 HTTP OPTIONS 请求,返回对特定 URL 的 Allow 头信息
- postForLocation():POST 数据到一个 URL,返回新创建资源的 URL
- put():PUT 资源到特定的 URL
2,安装配置
(1)首先编辑 pom.xml 文件,导入 springboot 的 web 包。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
(2)接着创建一个 RestTemplate 的配置类,同时设置连接池大小、超时时间、重试机制等等。
@Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory){ return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(15000); // 连接超时 factory.setReadTimeout(5000); // 数据读取超时时间 return factory; } }
3,使用样例
(1)要发起网络请求时直接将 RestTemplate 对象注入使用即可。这里我们请求一个网络接口,并将结果以字符串的形式打印出来。
@RestController public class HelloController { @Autowired private RestTemplate restTemplate; @GetMapping("/test") public String test() { String url = "http://jsonplaceholder.typicode.com/posts/1"; return restTemplate.getForObject(url, String.class); } }
(2)运行结果如下: