当前位置: > > > SpringBoot - 网络请求模版类RestTemplate使用详解1(安装配置、基本用法)

SpringBoot - 网络请求模版类RestTemplate使用详解1(安装配置、基本用法)

一、基本介绍

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)运行结果如下:
评论0