RestTemplate使用详解

news2024/10/5 8:14:18

文章目录

      • 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
     */
    @Bean
    public 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 {

    @Autowired
    private RestTemplate restTemplate;

    /**
     * 测试get请求携带url参数,访问外部接口
     */
    @Test
    public 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对象
     */
    @Test
    public void test02(){
        String url="";
        /*
          参数1:url请求地址
          参数2:请求返回的数据类型
         */
        Account account = restTemplate.getForObject(url, Account.class);
        System.out.println(account);
    }

    @Data
    public static class Account {

        private Integer id;

        private String userName;

        private String address;
        
    }

效果:

在这里插入图片描述


3)请求头携带参数访问外部接口

    /**
     * 请求头设置参数,访问指定接口
     */
    @Test
    public 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表单提交数据
     */
    @Test
    public 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数据
     */
    @Test
    public 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值
     */
    @Test
    public void test06(){
        String url="";
        ResponseEntity<String> result = restTemplate.getForEntity(url, String.class);
        //获取cookie
        List<String> cookies = result.getHeaders().get("Set-Cookie");
        //获取响应数据
        String resStr = result.getBody();
        System.out.println(resStr);
        System.out.println(cookies);
    }

效果:

在这里插入图片描述


在这里插入图片描述

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

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

相关文章

Spring:AOP 的详细内容

文章目录 Spring&#xff1a;Day 03AOP一、概述二、搭建环境三、实现 AOP1. 方式一&#xff1a;使用原生 Spring 的 API 接口2. 方式二&#xff1a;自定义类&#xff08;切面&#xff09;3. 方式三&#xff1a;注解 四、总结 Spring&#xff1a;Day 03 AOP 一、概述 AOP&…

相见恨晚的5款良心软件,每款都是经过时间检验的精品

今天来给大家推荐5款良心软件,每款都是经过时间检验的精品,用起来让你的工作效率提升飞快&#xff0c;各个都让你觉得相见恨晚&#xff01; 1.颜色选择器——ColorPicker ColorPicker是一款用于在屏幕上选择颜色的工具。它可以让你快速地获取任意像素的颜色值,并复制到剪贴板…

信息收集-子域名

&#xff08;一&#xff09;、子域名 子域名是父域名的下一级&#xff0c;比如“huiyuan.xxx.com”和“bbs.xxx.com”这两个域名是“xxx.com”的子域名&#xff0c; 企业可能有多个、几十个甚至更多的子域名应用&#xff0c;因为子域名数量多&#xff0c;企业子域名应用的防护…

设计模式之【迭代器模式】,对集合访问的统一

文章目录 一、什么是迭代器模式1、迭代器模式使用场景2、迭代器模式的优势3、迭代器模式的四种角色4、迭代器模式的优缺点 二、手写一个迭代器1、迭代器模式的一般写法2、课程迭代器 三、源码中的迭代器1、ArrayList 一、什么是迭代器模式 迭代器模式&#xff08;Iterator Pat…

(5.12-5.18)【大数据新闻速递】

关 注gzh“大数据食铁兽”&#xff0c;了解更多大数据快讯 【打造全国首个数据要素产业集聚区&#xff01;浦东数据要素产业规模2025年将达1000亿元】 5月16日&#xff0c;“数启浦东”2023浦东新区数据要素产业主题系列活动启动。记者获悉&#xff0c;《张江数据要素产业集聚…

【实用工具】Guava EventBus(事件总线)快速入门

介绍 EventBus是Guava的事件处理机制&#xff0c;是设计模式中的观察者模式&#xff08;生产/消费者编程模型&#xff09;的优雅实现。对于事件监听和发布订阅模式&#xff0c;EventBus是一个非常优雅和简单解决方案&#xff0c;我们不用创建复杂的类和接口层次结构。 Java案…

树莓派报错Oops - unable to determine board type . . .model:17

报错原因 改变方法 cd /tmp wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb成功

技术的力量:如何用数据驱动实现设备健康管理

在当今数字化时代&#xff0c;设备管理部门面临着日益复杂的挑战。传统的设备管理方法已经无法满足快速发展的需求&#xff0c;而数字化转型成为了提升效率、降低成本、增强竞争力的关键路径。 本文将介绍设备管理部门数字化转型的痛点、可参考的蓝图规划以及PreMaint平台在实现…

浅谈面向无线通信的微波毫米波无源天线及器件

一、背景 本文谈及的微波毫米波&#xff08;下简称微波&#xff09;产品主要是指工作在4&#xff5e;86GHz频段的无源天线和器件。它们使通信系统在不需要电源模块的情况下具备较高的动态范围和实现宽带模拟信道传输&#xff0c;属于现代点对点无线通信系统中核心天馈部件。文…

5年测试开发,跳槽薪资25k变成30k,总结的这些面试题,你会哪些?

每年的金三银四都是各大公司招聘程序员的最佳时期&#xff0c;在这段时间内有好多程序员会为了面试而发愁&#xff0c;不知道如何才能收到好的offer&#xff0c;拿到理想的薪资&#xff0c;实现自我的人生价值&#xff01; 我想告诉大家的是&#xff0c;其实都不用愁的&#xf…

AOSP构建、编译基础理解

AOSP构建、编译基础理解 构建系统 参考这篇文章&#xff0c;写的比较好&#xff0c;我就不狗尾续貂了&#xff01; android build system编译系统概述 source build/envsetup.sh之后的事情 source也就是执行build/envsetup.sh里面的脚本&#xff0c;改脚本定义许多命令&…

​GPT充当大脑,指挥多个模型协作完成各类任务,通用系统AutoML-GPT来了

使用 ChatGPT 实现通用人工智能&#xff0c;思路打开了。 当前&#xff0c;AI 模型虽然已经涉及非常广泛的应用领域&#xff0c;但大部分 AI 模型是为特定任务而设计的&#xff0c;它们往往需要大量的人力来完成正确的模型架构、优化算法和超参数。ChatGPT、GPT-4 爆火之后&…

ST典型碳化硅MOSFET驱动应用方案

ST典型碳化硅MOSFET驱动应用方案 1.栅极驱动器规格和功能实现 参考资料&#xff1a;ST官网应用手册《AN4671》 作者&#xff1a;Xiou 1.栅极驱动器规格和功能实现 以下是对栅极驱动要求的简短列表&#xff1a; dv / dt 的瞬变抗扰度&#xff1a;在整个温度范围内 50 V/ns。 …

超级简单的开源saas后台系统管理框架Vite+Vue3

大家好&#xff0c;今天我给大家带来一款超简saas后台管理系统框架&#xff0c;他是一款快速开发SAAS通用管理系统后台框架&#xff0c;前端采用最新的技术栈ViteTypeScriptVue3ElementPlus最流行技术架构&#xff0c;后台结合PHP8、Java SDK、Python等主流后端语言搭建&#x…

黑盒测试方法: 从原理到实战

文章目录 一. 如何设计测试用例二. 常用黑盒测试方法1. 基于需求设计的测试用例2. 等价类划分法3. 边界值4. 判定表分析法 (因果分析法)5. 正交排列6. 场景设计法7. 用例场景示例8. 错误猜测法 三. 补充案例Fiddler实现弱网测试水杯测试用例微信朋友圈测试用例淘宝购物车测试用…

ESP8266连接 TLink 云平台

1.硬件准备 &#xff08;1&#xff09;正点原子 ATK-ESP-01 WIFI 模块 &#xff08;2&#xff09;正点原子 STM32F103ZET6精英板子 &#xff08;3&#xff09;USB转TTL模块 2.烧录固件 &#xff08;1&#xff09;烧录软件和固件都可以在正点原子增值资料包找到。 &#xff08;2…

网络安全基础--dns劫持及IP信息收集

0x01 验证是否存在CDN 方法1&#xff1a; 很简单&#xff0c;使用各种多地 ping 的服务&#xff0c;查看对应 IP 地址是否唯一&#xff0c;如果不唯一多半是使用了CDN&#xff0c; 多地 Ping 网站有&#xff1a;多个地点Ping服务器,网站测速 - 站长工具网站测速工具_超级ping…

创建python虚拟环境的两种方法

创建python虚拟环境的两种方法 一、anaconda环境下1、检查是否安装了anaconda2、创建虚拟环境3、激活虚拟环境4、其他命令 二、python纯净环境下1. 安装virtualenv2. 创建虚拟环境3. 激活虚拟环境 一、anaconda环境下 1、检查是否安装了anaconda 只有在anaconda环境下才能创建…

近百个最新免费chatgpt访问集合,包含国内直接访问和国外升级版本

近百个最新免费chatgpt访问集合&#xff0c;包含国内直接访问和国外升级版本。 ChatGPT是一个基于人工智能的聊天机器人&#xff0c;它可以与用户进行自然语言交互。ChatGPT使用了最新的自然语言处理技术&#xff0c;包括深度学习和神经网络&#xff0c;以便更好地理解用户的…

慎投,5月有4本SCIE期刊被剔除(附SCI/SSCI目录下载)

2023年5月SCI、SSCI期刊目录更新 2023年5月18日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次4月WOS期刊目录剔除8本SCIE&SSCI期刊之后&#xff0c;此次5月更新又有4本SCIE期刊发生变动&#xff0c;其中有1本期刊被踢出SCIE数据库&#xff0c;3本期刊更改了名…