开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
前言
在日常开发的过程中,我们使用最多的可以说就是http请求了,不论是前端和后端的交互,还是服务端与服务端的交互可以说都离不开http请求,包括注册中心、配置中心获取服务的列表,获取去配置中心拿到最新的配置文件参数,都是以http的方式去请求注册中心和配置中心,拿到对应的数据。
包括我们常用的Feign、Ribbon,所用的RestTemplate模版的方式创建连接,那么底层都是基于http协议的。
RestTemplate简介
RestTemplate是由Spring框架提供的可调rest服务的类,统一封装了RESTFul风格的标准,封装了http的连接,只需要传入对应的url和返回值类型,并且提供了headForHeaders()、getForObject()、putForObject(),postForObject ()、put()和delete()方法,对http的HEAD、GET、POST、PUT、DELETE、OPTIONS请求方式进行封装。
通过RestTemplateBuilder就可以构建RestTemplate模版
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
return builder
//设置连接超时时间
.setConnectTimeout(Duration.ofSeconds(5000))
//设置读取超时时间
.setReadTimeout(Duration.ofSeconds(5000))
//设置认证信息
.basicAuthentication("username","password")
//设置根路径
.rootUri("xxx")
//构建
.build();
}
RestTemplate的使用
GET请求
一个是getForObject返回的是一个范型对象,getForEntity返回的是一个ResponseEntity实体,ResponseEntity继承了HttpEntity,可以看作是一个对http响应的封装,包括响应status、响应内容body、响应头headers
POST请求
postForLocation
postForObject
postForEntity
Post请求主要提供了这三种,主要就是四个入参数
- URL 传入需要请求的接口地址
- request 需要上传的json格式的参数
- responseType 返回响应内容的具体类型
- uriVariables 指定参数追加在URL后面
PUT请求
Put请求只有一类,请求参数基本与post一样,就是没有返回值。
DELETE请求
与put请求一样,也是没返回值。
HEAD请求
发送请求获取请求头的信息,返回自然是获取http里header的信息。
PATCH请求
Patch请求用于更新某个资源,request请求体也是放在body里面。
OPTIONS请求
optionsForAllow 方法返回的是一个set集合的HttpMethod类,主要用来判断传入的url地址,可以用哪种请求方式请求。
execute方法
可以看到以上各种类型的请求方法,最后都是调execute方法来执行的,可以看到入参数有RequestCallback和ResponseExtractor这两个类
RequestCallback
通过看源码是对请求体和请求头做处理的,检查请求的完整性。
ResponseExtractor
是用来解析响应体的,对于调用完返回的响应体类型进行解析,相当于回调解析。
RestTemplate调用
调用主需要将已经构建好的restTemplate引入,直接调用对应的请求方法。
@Test
void test() {
//请求地址
String url = "http://xxx/get";
HashMap<String, String> map = new HashMap<>();
map.put("name","Lxlxxx");
Object forObject = restTemplate.getForObject(url, Object.class, map);
System.out.println(forObject);
}