什么是RestTemplate
RestTemplate
是从Spring 3.0开始支执行Http请求的客户端工具,常见的Http客户端库有
- Jjava JDK自带的HttpURLConnection
- Apache HttpComponents
- OkHttp
这些客户端库对,提供常见的REST请求模板,例如Get、Post、PUT和Delete请求,相对于直接使用底层Http客户端库,RestTemplate
的操作更加方便、快捷在很大程度上提高开发效率。
SpringBoot使用RestTemplate
从Spring3.0引入RestTemplate
后它就作为spring-web
的一部分,而spring-boot-starter-web
保重包含了spring-web
因此只需要添加spring-boot-starter-web
依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
RestTemplate初始化
SpringBoot在AutoConfig的时候,自动注入了JDK自带的HttpURLConnection作为RestTemplate底层的Http客户端实现,也可以将底层的Http实现转换为OkHttp
,Apache HttpComponents
,并且需要初始化Bean。
@Configuration
public class MyRestTemplate {
/**
* 默认使用JDK 自带的HttpURLConnection作为底层实现
* @return
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
注入RestTemplate
我们将RestTemplate注入到我们需要使用的地方进行测试,我们使用知乎专栏免费测试接口地址,测试
@RequestMapping("/test")
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("zhihu")
public String test(){
String forEntity = restTemplate.getForObject("https://zhuanlan.zhihu.com/api/columns/zhihuadmin", String.class);
return forEntity;
}
}
然后在postman中输入http://localhost:8080/test/zhihu测试
底层Http客户端库切换
我们在网上对Http客户端的测评来看OkHttp的性能优于Apache HttpComponents
和JDK自带的HttpURLConnection
,那么我们如何将底层Http客户端库切换为我们需要使用的Http客户端库呢?
切换为OkHttp
- 添加依赖
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>
- 初始化RestTemplate的Bean
@Bean
public RestTemplate restTemplateOkHttp(){
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
切换为Apache HttpComponents
- 添加依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
- 初始化RestTemplate的Bean
@Bean
public RestTemplate restTemplateHttpClient(){
return new RestTemplate(new HttpComponentsClientHttpRequestFactory());
}
标签:基本,web,Http,RestTemplate,介绍,Bean,public,客户端
From: https://blog.51cto.com/maguobin/7479260