文章目录
- 1.1 RestTemplate环境准备
- 1)背景说明
- 2)工程配置RestTemplate
- 1.2 RestTemplate API入门-1
- 1)get请求携带参数访问外部url
- 2)get请求响应数据自动封装vo实体对象
- 3)请求头携带参数访问外部接口
- 1.3 RestTemplate API入门-2
- 4)POST请求模拟form表单访问外部接口
- 5)POST请求发送JSON数据
- 6)获取接口响应的cookie数据
RestTemplate
是 Spring
提供的一个用于访问 RESTful Web
服务的客户端工具。它可以方便地处理 HTTP 请求和响应,支持多种 HTTP
方法(GET、POST、PUT等),并且能够将服务器返回的JSON、XML等数据自动转换成Java对象。
1.1 RestTemplate环境准备
1)背景说明
Spring 框架已为我们封装了一套后端访问http接口的模板工具:RestTemplate。
RestTemplate非常轻量级,使用简单易上手。
2)工程配置RestTemplate
在stock_backend工程下配置RestTemplate bean:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;/*** @Description 定义访问http服务的配置类*/
@Configuration
public class HttpClientConfig {/*** 定义restTemplate bean* @return*/@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}
1.2 RestTemplate API入门-1
1)get请求携带参数访问外部url
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;/*** @Description*/
@SpringBootTest
public class TestRestTemplate {@Autowiredprivate RestTemplate restTemplate;/*** 测试get请求携带url参数,访问外部接口*/@Testpublic void test01(){String url="";/*参数1:url请求地址参数2:请求返回的数据类型*/ResponseEntity<String> result = restTemplate.getForEntity(url, String.class);//获取响应头HttpHeaders headers = result.getHeaders();System.out.println(headers.toString());//响应状态码int statusCode = result.getStatusCodeValue();System.out.println(statusCode);//响应数据String respData = result.getBody();System.out.println(respData);}
}
效果:
2)get请求响应数据自动封装vo实体对象
/*** 测试响应数据自动封装到vo对象*/@Testpublic void test02(){String url="";/*参数1:url请求地址参数2:请求返回的数据类型*/Account account = restTemplate.getForObject(url, Account.class);System.out.println(account);}@Datapublic static class Account {private Integer id;private String userName;private String address;}
效果:
3)请求头携带参数访问外部接口
/*** 请求头设置参数,访问指定接口*/@Testpublic void test03(){String url="http://localhost:6666/account/getHeader";//设置请求头参数HttpHeaders headers = new HttpHeaders();headers.add("userName","zhangsan");//请求头填充到请求对象下HttpEntity<Map> entry = new HttpEntity<>(headers);//发送请求ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, entry, String.class);String result = responseEntity.getBody();System.out.println(result);}
效果:
1.3 RestTemplate API入门-2
4)POST请求模拟form表单访问外部接口
/*** post模拟form表单提交数据*/@Testpublic void test04(){String url="";//设置请求头,指定请求数据方式HttpHeaders headers = new HttpHeaders();headers.add("Content-type","application/x-www-form-urlencoded");//组装模拟form表单提交数据LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();map.add("id","10");map.add("userName","itheima");map.add("address","shanghai");HttpEntity<LinkedMultiValueMap<String, Object>> httpEntity = new HttpEntity<>(map, headers);/*参数1:请求url地址参数2:请求方式 POST参数3:请求体对象,携带了请求头和请求体相关的参数参数4:响应数据类型*/ResponseEntity<Account> exchange = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Account.class);Account body = exchange.getBody();System.out.println(body);}
效果:
5)POST请求发送JSON数据
/*** post发送json数据*/@Testpublic void test05(){String url="";//设置请求头的请求参数类型HttpHeaders headers = new HttpHeaders();headers.add("Content-type","application/json; charset=utf-8");//组装json格式数据
// HashMap<String, String> reqMap = new HashMap<>();
// reqMap.put("id","1");
// reqMap.put("userName","zhangsan");
// reqMap.put("address","上海");
// String jsonReqData = new Gson().toJson(reqMap);String jsonReq="{\"address\":\"上海\",\"id\":\"1\",\"userName\":\"zhangsan\"}";//构建请求对象HttpEntity<String> httpEntity = new HttpEntity<>(jsonReq, headers);/*发送数据参数1:请求url地址参数2:请求方式参数3:请求体对象,携带了请求头和请求体相关的参数参数4:响应数据类型*/ResponseEntity<Account> responseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Account.class);//或者// Account account=restTemplate.postForObject(url,httpEntity,Account.class);Account body = responseEntity.getBody();System.out.println(body);}
效果:
6)获取接口响应的cookie数据
/*** 获取请求cookie值*/@Testpublic void test06(){String url="";ResponseEntity<String> result = restTemplate.getForEntity(url, String.class);//获取cookieList<String> cookies = result.getHeaders().get("Set-Cookie");//获取响应数据String resStr = result.getBody();System.out.println(resStr);System.out.println(cookies);}
效果: