当前位置: 首页 > news >正文

SpringBoot+HttpClient+JsonPath提取A接口返回值作为参数调用B接口

前言
在做java接口自动化中,我们常常需要依赖多个接口,A接口依赖B,C,D接口的响应作为请求参数;或者URL中的参数是从其他接口中提取返回值作获取参数这是必不可少的。那么怎么实现呢?下面就来介绍多业务依赖多接口的代码思路。

思路:
1、先new一个HttpClientUtils对象,构造一个queryParamMap用来放请求参数 ,再构造 一个headers的Map用来放请求头
2、调用get/post请求 获得请求返回值
3、用jsonpath技术, 对A接口中的响应值data取出来
4、遍历获取到的list 然后for循环每条数据
5、close关闭HttpClientUtils对象 释放资源

首先,我们来看下 getCategoryBookList 根据分类名称查询书籍接口 在Controller层代码实现如图所示

 /*** 根据分类名称查询书籍** @return*/@GetMapping("/getCategoryBookList")@ResponseBodypublic CommonResponse<List<Book>> getCategoryBookList(@RequestParam(value = "categoryName") String name) {List<Book> categoryList = bookService.getCategoryBookList(name);CommonResponse response = CommonResponse.successInstance(categoryList);return response;}

代码解释

  • CommonResponse这个类 是与前端交互用的 因为这个类里面还有请求的statusCode msg
    data,如果你想把httpClient调用接口的返回值 返给前端
    就将返回值设置到CommonResponse的data中就行
  • @RequestParam(value = "categoryName")如果是问号后面拼的参数 这个用@RequestParam来取,告诉springboot 这个name对应的就是参数中的categoryName,就是说前端页面给你传的参数名叫categoryName 但是你代码中写的变量名是name 如果不加这个参数 是接收不到的 所以需要注解映射
  • CommonResponse.successInstance(categoryList)通用返回值,返回成功message,返回数据data,返回总条数count

其次,我们需要提取/getCategoryBookList接口返回的bookName值
在这里插入图片描述
使用JsonPath提取,代码如下

    @GetMapping("/returnHttpGet")@ResponseBodypublic CommonResponse returnHttpGet(@RequestParam(value = "categoryName") String categoryName) {String url = "http://localhost:9527/book/getCategoryBookList";HttpClientUtils client = new HttpClientUtils(null);Map<String, String> headers = new HashMap<>();headers.put("Content-Type", "application/x-www-form-urlencoded");Map<String, String> queryParam = new HashMap<>();queryParam.put("categoryName", categoryName);String result = "";try {result = client.get(String.class, url, queryParam, headers);System.out.println(result);//使用jsonpath取出响应数据中的bookName值List<String> bookNames = JsonPath.read(result, "$.data.[*].bookName");return CommonResponse.successInstance(bookNames);//这个return返回来的值就是个json字符串,可以用jsonpath获取了client.close();}return CommonResponse.errorInstance(result);}

我们来在浏览器输入URL请求,已经成功提取到了这个bookName值
在这里插入图片描述
接下来,我们先看下下一个接口/getBookByBookName在Controler层的代码

 /*** 根据书的名称获取书籍信息* @param bookName* @return*/@GetMapping("/getBookByBookName/{bookName}")@ResponseBodypublic CommonResponse<Book> getBookByBookName(@PathVariable String bookName){Book bName =   bookService.getBookByBookName(bookName);CommonResponse response = CommonResponse.successInstance(bName);return response;}

代码解释

  • @PathVariable String bookName @PathVariable是取url中的变量 ,会自动进行赋值拼接在URL后面

将bookName作为getBookByBookName`接口的请求参数,代码如下

 String result = "";try {result = client.get(String.class, url, queryParam, headers);System.out.println(result);//使用jsonpath取出响应数据中的bookName值List<String> bookNames = JsonPath.read(result, "$.data.[*].bookName");String bookName = "";
//            for (String str : bookNames) {
//                bookName = str; 这种遍历我注视掉了 每遍历一次书名就走一次请求 而且遍历出来的书名都不一样
//            }String urls = "http://localhost:9527/getBookByBookName";HttpClientUtils htp = new HttpClientUtils(null);Map<String, String> header = new HashMap<>();headers.put("Content-Type", "application/x-www-form-urlencoded");Map<String, String> param = new HashMap<>();param.put("bookName",  bookNames.get(0));String res = "";try {//将jsonpath取出的bookName作为请求参数res = client.get(String.class, urls, param, header);System.out.println(res);} catch (Exception e) {e.printStackTrace();}return CommonResponse.successInstance(bookNames);//这个return返回来的值就是个json字符串,可以用jsonpath获取了} catch (Exception e) {e.printStackTrace();} finally {client.close();}return CommonResponse.errorInstance(result);}

最后我们在浏览器输入URL请求,已经成功返回了第二个接口的返回值
在这里插入图片描述
到此就大功告成,完成了HttpClient+JsonPath提取响应值作为多个接口请求参数,解决多业务依赖关联

相关文章:

SpringBoot+HttpClient+JsonPath提取A接口返回值作为参数调用B接口

前言 在做java接口自动化中&#xff0c;我们常常需要依赖多个接口&#xff0c;A接口依赖B&#xff0c;C&#xff0c;D接口的响应作为请求参数&#xff1b;或者URL中的参数是从其他接口中提取返回值作获取参数这是必不可少的。那么怎么实现呢&#xff1f;下面就来介绍多业务依赖…...

JUC 之 CompletableFuture

——CompletableFuture Future Future 接口&#xff08;FutureTask 实现类&#xff09; 定义了操作异步任务执行的一些方法&#xff0c;如获取异步的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕例如&#xff1a; 主线程让一个子线程去执行任务&…...

7-vue-1

谈谈你对MVVM的理解 为什么要有这些模式&#xff0c;目的&#xff1a;职责划分、分层&#xff08;将Model层、View层进行分类&#xff09;借鉴后端思想&#xff0c;对于前端而已&#xff0c;就是如何将数据同步到页面上 MVC模式 代表&#xff1a;Backbone underscore jquer…...

OpenAPI SDK组件介绍

背景 公司成立以来&#xff0c;积累了数以万计的可复用接口。上层的SaaS业务&#xff0c;原则上要复用这些接口开发自己的业务&#xff0c;为了屏蔽调用接口的复杂性&#xff0c;基础服务开发了apisdk组件&#xff0c;定义了一套声明OpenAPI的注解、注解解析器&#xff0c;实例…...

【Java】Synchronized锁原理和优化

一、synchronized介绍 synchronized中文意思是同步&#xff0c;也称之为”同步锁“。 synchronized的作用是保证在同一时刻&#xff0c; 被修饰的代码块或方法只会有一个线程执行&#xff0c;以达到保证并发安全的效果。 synchronized是Java中解决并发问题的一种最常用的方法…...

西北工业大学2020-2021学年大物(I)下期末试题选填解析

2 位移电流。磁效应服从安培环路&#xff0c;热效应不服从焦耳-楞次定律。注意&#xff0c;它是变化的电场而非磁场产生。3 又考恒定磁场中安培环路定理。4感生电场5 麦克斯韦速率分布函数。6 相同的高温热源和低温热源之间的一切可逆热机的工作效率相等&#xff0c;无论工质如…...

PHP - ChatGpt API 接入 ,代码,亲测!(最简单!)

由于最近ChatGpt 大火&#xff0c;但是门槛来说是对于大家最头疼的环节&#xff0c; 我自己也先开发了一个个人小程序&#xff01;大家可以访问使用下&#xff0c; 由此ChatGpt 有一个API 可以仅供大伙对接 让我来说下资质&#xff1a; 1&#xff1a;首先要搞得到一个 ChatGp…...

物联网MQTT协议简单介绍

物联网曾被认为是继计算机、互联网之后&#xff0c;信息技术行业的第三次浪潮。随着基础通讯设施的不断完善&#xff0c;尤其是 5G 的出现&#xff0c;进一步降低了万物互联的门槛和成本。物联网本身也是 AI 和区块链应用很好的落地场景之一&#xff0c;各大云服务商也在纷纷上…...

Dubbo 源码解读:负载均衡策略

概览 org.apache.dubbo包下META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.LoadBalance中内部spi实现类有以下几种&#xff1a; randomorg.apache.dubbo.rpc.cluster.loadbalance.RandomLoadBalance roundrobinorg.apache.dubbo.rpc.cluster.loadbalance.RoundRobinL…...

吃瓜教程笔记—Task04

神经网络 知识点 M-P神经元 模型如图所示&#xff1a;  神经元的工作机理&#xff1a;神经元接收来到n个其他神经元传递过来的输入信号&#xff0c;这些输入信号通过带权重的连接进行传递&#xff0c;神经元接收到的总输入值将与神经元的阈值进行比较&#xff0c;然后通过…...

进程地址空间(虚拟地址空间)

目录 引入问题 测试代码 引入地址空间 故事1&#xff1a; 故事二&#xff1a; 解决问题 为什么有虚拟地址空间 扩展 扩展1&#xff08;没有地址空间&#xff0c;OS如何工作&#xff09; 扩展2 &#xff08;代码只读深入了解&#xff09; 扩展3&#xff08;malloc本质…...

【项目精选】基于Vue + ECharts的数据可视化系统的设计与实现(论文+源码+视频)

今天给小伙伴们推荐一款超优秀的全新Vue3.0大数据系统Vue3-bigData。 点击下载源码 vue3-bigdata 基于vue3.0echarts构建的可视化大屏图表展示系统。包括各种可视化图表及Vue3新API使用。 功能 柱状图、饼图、词云图、漏斗图 水球图、折线图 仪表盘、雷达图 矩形树图、关系…...

JavaScript Window Screen

文章目录JavaScript Window ScreenWindow ScreenWindow Screen 可用宽度Window Screen 可用高度JavaScript Window Screen window.screen 对象包含有关用户屏幕的信息。 Window Screen window.screen对象在编写时可以不使用 window 这个前缀。 一些属性&#xff1a; screen…...

【双重注意机制:肺癌:超分】

Dual attention mechanism network for lung cancer images super-resolution &#xff08;肺癌图像超分辨率的双重注意机制网络&#xff09; 目前&#xff0c;肺癌的发病率和死亡率均居世界恶性肿瘤之首。提高肺部薄层CT的分辨率对于肺癌筛查的早期诊断尤为重要。针对超分辨…...

各种中间件的使用

init background 这一部分我们学习一些常用的&#xff0c; 但是不需要深入理解的中间件 &#xff0c; 例如kafka ,分布式文件系统。 summary Content what is kafka? What time to used it ? 其实消息队列就是解决系统之间复杂交互例如聊天系统和交易系统&#xff0c; …...

Systemverilog覆盖率的合并和计算方式

在systemverilog中&#xff0c;对于一个covergroup来说&#xff0c;可能会有多个instance&#xff0c;我们可能需要对这些instance覆盖率进行操作。 只保存covergroup type的覆盖率&#xff0c;不需要保存instance-specified的覆盖率coverage type和instance-specified的覆盖率…...

(周末公众号解读系列)2000字-视觉SLAM综述

参考链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg2NzUxNTU1OA&mid2247528395&idx1&sn6c9290dd7fd926f11cbaca312fbe99a2&chksmceb84202f9cfcb1410353c805b122e8df2e2b79bd4031ddc5d8678f8b11c356a25f55f488907&scene126&sessionid1677323905…...

力扣29-两数相除

29. 两数相除 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &#x…...

【MindSpore】安装和使用MindSpore 2.0.0版本简单实现数据变换Transforms功能

本篇文章主要是讲讲MindSpore的安装以及根据官方提供的例子实现数据变换功能。 昇思MindSpore是一款开源的AI框架&#xff0c;旨在实现易开发、高效执行、全场景覆盖三大目标。 目录1、加入MindSpore社区2、安装前准备2.1、获取安装命令2.2、安装pip2.3、确认系统环境3、安装Mi…...

PRML笔记4-绪论中推断和决策小结

在推断阶段使用训练数据学习后验概率p(Ck∣x)p(\mathcal{C_k}|\boldsymbol{x})p(Ck​∣x)的模型&#xff1b;在决策阶段使用后验概率进行最优的分类&#xff1b;亦或是同时解决推断和决策问题&#xff0c;简单的学习一个函数f(x)f(\boldsymbol{x})f(x)&#xff0c;将输入x\bold…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...