Spring RestTemplate 模版解析

333 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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请求

2343CCB6-51C5-47FB-93BC-EF4DCB2DD4C5.png

48EC39F8-8342-4180-B7A2-49E0B41D6CC6.png

一个是getForObject返回的是一个范型对象,getForEntity返回的是一个ResponseEntity实体,ResponseEntity继承了HttpEntity,可以看作是一个对http响应的封装,包括响应status、响应内容body、响应头headers

POST请求

postForLocation

A24D14AA-A388-432B-B9E8-D12B4BDFAC78.png

postForObject

19089959-EC5E-467C-8BC9-CF767AB57AFE.png

postForEntity

13B06F24-5DA1-4ADD-A11A-3E321F3A92B4.png

Post请求主要提供了这三种,主要就是四个入参数

  • URL 传入需要请求的接口地址
  • request 需要上传的json格式的参数
  • responseType 返回响应内容的具体类型
  • uriVariables 指定参数追加在URL后面

PUT请求

C0420358-CF7A-44FA-BD99-BB400E7DDC1A.png

Put请求只有一类,请求参数基本与post一样,就是没有返回值。

DELETE请求

C360C147-8F27-463D-A42A-0725B08A2985.png

与put请求一样,也是没返回值。

HEAD请求

9A8FB64C-AC46-4398-B6E0-257A1E0A728E.png

发送请求获取请求头的信息,返回自然是获取http里header的信息。

PATCH请求

C9DD3048-4BD2-486F-9D34-B8B68E75F242.png

Patch请求用于更新某个资源,request请求体也是放在body里面。

OPTIONS请求

B629CC05-8805-4ABE-A9CE-354C756278E8.png

optionsForAllow 方法返回的是一个set集合的HttpMethod类,主要用来判断传入的url地址,可以用哪种请求方式请求。

execute方法

可以看到以上各种类型的请求方法,最后都是调execute方法来执行的,可以看到入参数有RequestCallback和ResponseExtractor这两个类

F38646EE-15CA-4995-A9AE-CD518AA2F3CA.png

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);
}