使用RestTemplate发送HTTP请求

文章目录

      • 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数据

在这里插入图片描述


RestTemplateSpring 提供的一个用于访问 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);}

效果:

在这里插入图片描述




在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2815252.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】云服务器的Redis被黑

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Linux ⛺️稳中求进&#xff0c;晒太阳 攻击发现&#xff1a; 这个异常情况是在腾讯云被入侵后&#xff0c;短信提醒发现的。并没有系统的学习过关于服务器安防相关的知识&#xff0c;遇到…

某查查首页瀑布流headers加密

目标网站&#xff1a; 某查查 对目标网站分析发现 红框内的参数和值都是加密的&#xff0c;是根据算法算出来的&#xff0c;故进行逆向分析。 由于没有固定参数名&#xff0c;只能通过搜索headers&#xff0c;在搜索的位置上打上断点&#xff0c;重新请求。 断点在此处断住&a…

基于springboot实现鞋类商品购物商城系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现鞋类商品购物商城系统演示 摘要 时代的变化速度实在超出人类的所料&#xff0c;21世纪&#xff0c;计算机已经发展到各行各业&#xff0c;各个地区&#xff0c;它的载体媒介-计算机&#xff0c;大众称之为的电脑&#xff0c;是一种特高速的科学仪器&#xf…

trie树(前缀树)

前缀树 1. 前缀树的的介绍2.前缀树的实现2.1插入功能2.2删除功能2.3查找前缀和查找单词功能2.4 哈希表版本 1. 前缀树的的介绍 在计算机科学中&#xff0c;trie&#xff0c;又称前缀树或字典树&#xff0c;是一种有序树&#xff0c;用于保存关联数组&#xff0c;其中的键通常是…

177基于matlab的基于S函数的变步长自适应滤波算法

基于matlab的基于S函数的变步长自适应滤波算法&#xff0c;比传统的算法收敛速度更快。传统的LMS算法中&#xff0c;权值向量实时地被更新。这些更新可能会由于噪声的影响而变得不稳定。SVSLMS算法是一种改进的LMS算法&#xff0c;它采用了矢量处理的概念&#xff0c;利用信号和…

Qt中的QGraphicView和QGraphicScene简单使用

概述&#xff1a;我们利用QGraphicView和QGraphicScene来实现一个简单的视频播放器&#xff0c;然后上面悬浮一些操作的控件&#xff0c;看看怎么来实现。 1、CcTestVideoPlayer类 模拟播放器类&#xff0c;继承QGraphicScene 1.1 CcTestVideoPlayer.h #pragma once#include…

【低代码开发_RuoYi_框架】RuoYi框架_前端页面部署/搭建

开源软件的影响力 随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点&#xff0c;使得越来越多的企业和个人选择使用开源软件&#xff0c;促进了软件行业的繁荣。然而&#xff0c;…

代码随想录刷题训练营day25:LeetCode(216)组合总和III、LeetCode(17)电话号码的字母组合

代码随想录刷题训练营day25&#xff1a;LeetCode(40)组合总和 II、LeetCode(216)组合总和III、LeetCode(17)电话号码的字母组合 LeetCode(40)组合总和 II 题目 代码 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util…

高性能Server的基石:reactor反应堆模式

业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上&#xff0c;服务端server接收到IO请求后&#xff0c;是如何处理请求并最终进入业务流程的呢&#xff1f;这里不得不提到reactor反应堆模型。reactor反应堆模型来源于大师Doug Lea在 《Sacalable io …

linux下查看某个命令在哪里个安装包程序下,以ifconfig命令举例子

yum list | grep net-tools &#xff08;查看yum安装列表中有没有安装指定的软件工具&#xff09;

USB Series A and Series B 连接器的引脚定义

参考《Universal Serial Bus Specification, Revision 2.0, April 27, 2000》

C++——类和对象(2):构造函数、析构函数、拷贝构造函数

2. 类的6个默认成员函数 我们将什么成员都没有的类称为空类&#xff0c;但是空类中并不是什么都没有。任何类中都会存在6个默认成员函数&#xff0c;这6个默认成员函数如果用户没有实现&#xff0c;则会由编译器默认生成。 6个默认成员函数包括&#xff1a;负责初始化工作的构造…

python dictionary 字典

Python 字典 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#xff0c;每个对之间用逗号(,)分割&#xff0c;整个字典包括在花括号 {} 中 ,格式如下 d {key1 : value1, key2 : value2, key3 : value3 }dict 作…

RocketMQ入坑指南(五):SpringBoot集成RocketMQ和具体使用方式

前言 经过前面几部分的教程&#xff0c;大家应该已经对RocketMQ有了一个全面的认识&#xff0c;建议仔细阅读前几章的内容&#xff0c;可以更好的理解这次的内容&#xff0c;接下来&#xff0c;我们通过代码来演示一下SpringBoot如何集成并使用RocketMQ发送消息 一、SpringBo…

Linux笔记--用户与用户组

Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员(root)申请一个账号&#xff0c;然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&#xff0c;并控制他们对系…

Unity中URP下实现水体(水面反射)

文章目录 前言一、原理1、法一&#xff1a;使用立方体纹理 CubeMap&#xff0c;作为反射纹理使用2、法二&#xff1a;使用反射探针生成环境反射图&#xff0c;所谓反射的采样纹理 二、实现水面反射1、定义和申明CubeMap2、反射向量需要什么3、计算 N ⃗ \vec{N} N 4、计算 V ⃗…

【C++私房菜】序列式容器的迭代器失效问题

目录 一、list的迭代器失效 二、vector的迭代器失效 1、空间缩小操作 2、空间扩大操作 三、总结 在C中&#xff0c;当对容器进行插入或删除操作时&#xff0c;可能会导致迭代器失效的问题。所谓迭代器失效指的是&#xff0c;原先指向容器中某个元素的迭代器&#xff0c;在…

STM32_DS18B20_1_芯片简介及初始化配置

DS18B20介绍 DS18B20数字温度计提供9位到12位摄氏度的温度测量&#xff0c;并具有非易失性&#xff0c;用户可编程的上下触发点的报警功能。DS18B20通过1线总线进行通信&#xff0c;根据定义&#xff0c;该总线只需要一条数据线&#xff0c;即可与中央微处理器进行通信…

5G双域快网

目录 一、业务场景 二、三类技术方案 2.1、专用DNN方案 2.2、ULCL方案&#xff1a;通用/专用DNNULCL分流 2.3、 多DNN方案-定制终端无感分流方案 漫游场景 一、业务场景 初期双域专网业务可划分为三类业务场景&#xff0c;学校、政务、文旅等行业均已提出公/专网融合访问需…

每日五道java面试题之spring篇(九)

目录&#xff1a; 第一题. 说一下Spring的事务传播行为第二题. 说一下 spring 的事务隔离&#xff1f;第三题. Spring AOP and AspectJ AOP 有什么区别&#xff1f;AOP 有哪些实现方式&#xff1f;第四题. JDK动态代理和CGLIB动态代理的区别第五题. 解释一下Spring AOP里面的几…