java自动化接口如何获取返回值中特定的字段HttpEntity类转换成实体类对象<搬代码>

news2024/10/6 18:27:24

第一看一下返回值是什么样子的:

{
    "msg": "查询成功",
    "total": 9223xxx75807,
    "code": 200,
    "maps": null,
    "devMsg": null,
    "rows": [
        {
            "detxxxme": "商户来**交易10000.00元",
            "profxxxme": "2022年11月30日 23:59:00",
            "inOuxxxpe": 2,
            "mxxxy": 1.5,
            "ixxxUrl": "https:\/\/xx-xxx-xxxx.xxx-xxx-xxxx.xxxx.com\/xxxx\/xxxx\/xxxx.png",
            "inBenxxxayAccount": "已入账",
            "inOxxxxnStatus": "机构补贴"
        }
                }

我们要获取断言 “inOxxxxnStatus”: "机构补贴"这个字段
第二步:将rows中的字段写成一个实体类


@Data
@NoArgsConstructor
public class ProductDto {
    private String cccc;
    private String proccccme;
    private String inccccpe;
    private String mccccy;
    private String iccccrl;
    private String inBeccccccount;
    private String inccccnStatus;
    然后getset,tostring,无参的

第三步:我们再until中设置一个csv文件,将我们要遍历的数据写入其中**(因为我要看的是app中一页一页的数据,所以要csv文件模拟页面查询)**
1
第四步:就是编写读取csv放入接口中代码如下

    @Test
    public void shujujiaoyileixing() throws IOException, InterruptedException {
        int count=1;
        //创建以一个可关闭的httpclinet客户端,如同浏览器
        CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
//===========================
        String url=null;
        File csv = new File("src/main/java/com/znzdh/until/leixing.csv");//获取位置
        BufferedReader reader = new BufferedReader(new FileReader(csv));//new一个BufferedReader
        //读取到最后一行
        String line = "";
        //计数进行算平均响应时间
        int a=0;
        String pn=null;
        String ze=null;
        String pe=null;
        String th=null;
        //把一行数据分割多个字段
        while ((line = reader.readLine()) != null) {
            //StringTokenizer tokenizer = new StringTokenizer(line, ",");
            String[] split = line.split(",");
            System.out.println(split[0]);
            pn=split[0];
            ze=split[1];
            pe=split[2];
            th=split[3];
            System.out.println(pn+","+ze+","+pe+","+th);//输出一下看看正确不
            //url路径
            url="http://xxxxxx/xxxxx/xxxxx/xxxxx/xxxxx?pageNum="+pn+"&pageSize="+ze+"&accouxxxxxype="+pe+"&traxxxxxnth="+th;
            if (url!=null || url!=""){
                count+=1;
                System.out.println("count"+count);
            }
            
            HttpGet httpGet = new HttpGet(url);
            httpGet.addHeader("content-type","application/json");
            httpGet.addHeader("User-Agent","Mozilla/5.0 (Linux; LIO-AN00 Build/N2G48H; wv) ");
            httpGet.addHeader("Authorization", "app Bearer c27eacfe4523-a90a-730ee8c5c8ff");
            //创建一个接口相应的开始时间
            long starttime = System.currentTimeMillis();
            System.out.println("starttime:"+starttime);
            //创建一个结束的时间
            long endtime=0L;
            //可关闭的httpableclose
            CloseableHttpResponse respone=null;
            try {
            
                respone=closeableHttpClient.execute(httpGet);
                HttpEntity entity = respone.getEntity();
                String s = EntityUtils.toString(entity);
                System.out.println("s:"+s);
                JSONObject datas = JSONObject.parseObject(s);//转换成JSON格式
                System.out.println("rowss:"+datas.get("ae0"));
                Integer code = (Integer) datas.get("code");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
                if (code==200){
                    JSONObject data = JSONObject.parseObject(datas.toString());
                    JSONObject jo = JSONObject.parseObject(data.toString());
                    Object rows = jo.get("total");
                    System.out.println("rows:"+rows);

                    JSONArray inOutReasonStatus = JSONObject.parseArray(jo.get("rows").toString());
                    if (!inOutReasonStatus.isEmpty()){
                        List productDtos = JSONArray.parseArray(inOutReasonStatus.toJSONString(), ProductDto.class);
                        for (int i = 0; i <productDtos.size() ; i++) {
                            // System.out.println("productDtos:"+productDtos.get(i).toString());    //成功
                            ProductDto product= (ProductDto) productDtos.get(i);
                            System.out.println("product:"+product.getInOutReasonStatus());
                        }
                        System.out.println("productDtos:"+productDtos.get(7).toString());
                    }

                }


                //响应状态==性能
                System.out.println("所有请求头"+respone.getAllHeaders());
                System.out.println("响应状态:"+respone.getStatusLine());

                endtime=System.currentTimeMillis();
                System.out.println("响应时间:"+(endtime - starttime)/1000+"s");
                int times=0;
                if (endtime - starttime !=0){
                    times+=(endtime - starttime);
                    System.out.println("90%平均响应时间:"+times/((count-1)*0.9*1000)+"s");
                    System.out.println("95%平均响应时间:"+times/((count-1)*0.95*1000)+"s");
                    System.out.println("100%平均响应时间:"+times/((count-1)*1000)+"s");
                    System.out.println("吞吐量:"+(count-1)/times/1000);
                }
            }catch (Exception | Error e){
                e.printStackTrace();
            }/*finally {    //注意不要管理连接池,会报错,本地报错,线上也报错
                if (closeableHttpClient != null){
                    try {
                        closeableHttpClient.close();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                if (respone !=null){
                    try {
                        respone.close();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }*/

            Thread.sleep(20000);
            a+=1;
            System.out.println("计数"+a);

        }

        //System.out.println(url);
        reader.close();//关闭reader
//===========================

    }

输出结果如下截图:
3
还有别的获取字段的方式:因为返回的json串不一样,以下是别人的会带上链接
参考如下两位大佬:
https://blog.csdn.net/weixin_45481406/article/details/106062405
http://t.csdn.cn/kglhD

一:
http://t.csdn.cn/kglhD
最近在写使用java后端去请求第三方接口的代码,给大家分享关于HttpEntity类的处理方式,而处理请求是需要根据第三方的要求来处理的,所以这里着重展示HttpEntity的处理。

在开始代码前,需要知晓几个前提:

第三方接口已经开放,并且已经获得使用的权限
应经拿到接口的数据,包括需要传入的参数和返回值
json串如下:
5
根据第三方提供的SDK导入对应的jar包
6
然后根据接口返回值构建对应的实体类:
7
然后根据第三方的用例进行请求:
8
9
二:
https://blog.csdn.net/weixin_45481406/article/details/106062405
最近在写使用java后端去请求第三方接口的代码,给大家分享关于HttpEntity类的处理方式,而处理请求是需要根据第三方的要求来处理的,所以这里着重展示HttpEntity的处理。

在开始代码前,需要知晓几个前提:

第三方接口已经开放,并且已经获得使用的权限
应经拿到接口的数据,包括需要传入的参数和返回值
  首先展示我这个文档需要用到的接口参数和返回值,我将用这个接口来进行演示
10
11
然后需要导入几个jar包,这里我只做简单的演示,没涉及到具体的功能,所以需要的jar包不多

        <!-- 阿里的json工具包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>
        <!-- http请求工具 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.13</version>
        </dependency>

其次,根据返回值构建DTO实体类,这个实体类的结构必须按照返回值来构建,否则在转换时会失败

import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;

@Data
@NoArgsConstructor
@ApiModel(value = "商品")
public class ProductDto {
    private Integer id;
    private String name;
    private String logo;
    private Discount discount;
    private BigDecimal price;
    private BigDecimal mallPrice;
    private BigDecimal discountPrice;
    private BigDecimal salesVolume;
}

@Data
class Discount {
    private Integer type;
    private BigDecimal value;
}

然后进行请求,并对返回值进行解析,已在代码中进行注释,注意,请求方式第三方如果给了用例,最好参考用例进行请求,对返回值的解析可以使用以下方法

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dyh.peachsys.dto.ProductDto;
import io.swagger.annotations.Api;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Api(tags = "网络请求工具包")
public class HttpRequest {
    public static JSONArray httpRequest() {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(RequestCommon.url);
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpGet);//执行请求
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {//请求成功执行
                HttpEntity entity = response.getEntity();//获取返回的数据
                String s = EntityUtils.toString(entity);//转换成字符串
                JSONObject datas = JSONObject.parseObject(s);//转换成JSON格式
                Integer status = (Integer) datas.get("status");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
                if (status == 200) {//返回的状态
                    JSONObject data = JSONObject.parseObject(datas.get("data").toString());//"data"是根据返回值设定
                    JSONObject jo = JSONObject.parseObject(data.toJSONString());
                    JSONArray records = JSONObject.parseArray(jo.get("records").toString());//"records"是根据返回值设定
                    return records;//返回的数据就是我需要去解析的
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void getData() {
        JSONArray datas = httpRequest();//调用方法,回去"data"里面的数据
        List<ProductDto> products = new ArrayList<>();//创建dto对象,这个对象的结构来自于返回值
        if (!datas.isEmpty()) {//如果返回的数据不为空
            products = JSONArray.parseArray(datas.toJSONString(), ProductDto.class);//转换成对象
        }
        //输出测试
        products.forEach(product -> System.out.println(product));
    }
}

给大家我的git源码,有兴趣的小伙伴可以看看具体的实现(一直在更新中)(这也是这位大佬的)
git地址:https://github.com/peach-tec/peachsys(这也是这位大佬的)

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

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

相关文章

【云原生微服务】SpringCloud Commons通用抽象

&#x1f496; Spring家族及微服务系列文章 ✨【微服务】SpringCloud中OpenFeign请求处理及负载均衡流程 ✨【微服务】SpringCloud中Ribbon的WeightedResponseTimeRule策略 ✨【微服务】SpringCloud中Ribbon的轮询(RoundRobinRule)与重试(RetryRule)策略 ✨【微服务】SpringCl…

二叉搜索树-技术点

二叉树的描述 相当于给树来个计划生育 二叉树的原理 二叉树只允许最多两个节点 二叉树节点最多有两个节点 并不是一定要有两个分支节点 如图所示: 在非空的二叉树里,具有i-1层的节点的总数不超过2的i-1次方 i>1 深度为h-1的二叉树 最多有二的h次方 -1个结点 最少有h个结…

用electron+vue+ts开发桌面应用

1.搭建项目 npm create vitelatest安装electron插件 npm install electron -D npm install vite-plugin-electron -D这里安装插件会包如下错&#xff1a; 在终端执行&#xff1a; npm config set electron_mirror https://npm.taobao.org/mirrors/electron/配置参数 在vite…

程序的翻译环境【编译链接的过程】【详解】

本期介绍&#x1f356; 主要介绍&#xff1a;代码是如何一步步的转化成可执行城西的&#xff0c;详细介绍了编译和链接的过程&#xff0c;特别是在编译还可分为预编译、编译、汇编三个阶段&#xff0c;介绍每个阶段分别干什么。&#x1f440;。 文章目录一、概述&#x1f356;二…

手写一个简单的mybatis

1.写个简单的mybatis 今天写个简单版V1.0版本的mybatis&#xff0c;可以其实就是在jdbc的基础上一步步去优化的&#xff0c;网上各种帖子都是照着源码写&#xff0c;各种抄袭&#xff0c;没有自己的一点想法&#xff0c;写代码前要先思考&#xff0c;如果是你&#xff0c;你该…

【数据库数据恢复】MS SQL数据库提示“附加数据库错误 823”怎么恢复数据?

MS SQL Server是微软公司研发的数据库管理系统&#xff0c;SQL Server是一个可扩展的、高性能的、与WindowsNT有机结合的&#xff0c;为分布式客户机/服务器所设计的数据库管理系统&#xff0c;提供基于事务的企业级信息管理系统方案。 SQL Server数据库故障情况&分析&…

RCNN学习笔记-MobileNet

Abstract 我们提出了一类叫做MobileNets的高效模型用于移动和嵌入式视觉应用。MobileNets基于一种简化的架构&#xff0c;该架构使用深度方向可分离卷积来构建轻量级深度神经网络。我们引入了两个简单的全局超参数&#xff0c;可以有效地在延迟和准确性之间进行权衡。这些超参…

套用bi模板,轻松搞定各类数据分析报表

bi模板是什么?是一个个提前预设的报表设计&#xff0c;套用后立即生效&#xff0c;轻轻松松搞定bi数据可视化分析报表。bi模板都有哪些类型&#xff1f;怎么套用&#xff1f;以奥威bi数据可视化软件为例&#xff0c;聊聊bi模板的种类和下载使用。 bi模板有哪些&#xff1f; …

Web Component入门

本文作者为奇舞团前端开发工程师引言前端开发者&#xff0c;现在在进行项目的开发时&#xff0c;一般很少使用原生的js代码&#xff0c;往往都会依靠Vue&#xff0c;React等框架进行开发&#xff0c;而不同的框架都有自己不同的开发规则&#xff0c;但是目前所使用的主流框架&a…

关于小程序swiper图片不能撑满解决方案

问题描述 最近在写小程序的时候使用了swiper组件&#xff0c;但是发现一个很奇怪的现象&#xff0c;如果给image组件设置mode“widthFix”的话&#xff0c;那么图片的高度是不够撑满swiper-item的这样就会导致swiper的指示器往下偏移&#xff08;其实没有偏移&#xff0c;只是…

代码随想录刷题Day58 | 739. 每日温度 | 496. 下一个更大元素 I

代码随想录刷题Day58 | 739. 每日温度 | 496. 下一个更大元素 I 739. 每日温度 题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在…

剑指Offer51——数组中的逆序对

摘要 剑指 Offer 51. 数组中的逆序对 一、暴力的方法 1.1 暴力的解析 使用两层 for 循环枚举所有的数对&#xff0c;逐一判断是否构成逆序关系。 1.2 复杂度分析 时间复杂度&#xff1a;O(N^2)&#xff0c;这里N是数组的长度&#xff1b;空间复杂度&#xff1a;O(1)。 1…

【芯片应用】PA93

文章目录一、简介二、原理1、外部连接&#xff08;1&#xff09;相位补偿&#xff08;2&#xff09;限流电阻一、简介 性质&#xff1a;高压运算放大器 厂商&#xff1a;美国 APEX Microtechnology公司 供电电压&#xff1a;Vs to -Vs&#xff1a;最高400V&#xff0c;即200V …

【web课程设计】HTML+CSS仿QQ音乐网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【Windows基础】NTFS文件系统

NTFS文件系统 windows上的文件系统 早期Windows上使用&#xff1a;FAT16或FAT32&#xff08;Windows98&#xff09;目前Windows操作系统基本使用的是NTFS文件系统ReFS文件系统 ReFS&#xff08;Resilient File System&#xff0c;复原文件系统&#xff09;是在 Windows Serve…

万众期待的Dyson Zone空气净化耳机确认将于中国首发,戴森重新定义“好声音”

同享纯净音质与洁净空气&#xff0c;Dyson Zone™ 空气净化耳机确认将在中国开启全球首发 中国&#xff0c; 2022年12月8日 – 今日&#xff0c;戴森首次公开了Dyson Zone™ 空气净化耳机的详细技术参数&#xff0c;该产品已确认将在中国开启全球首发&#xff0c;并在戴森指定…

玩好.NET高级调试,你也要会写点汇编

一&#xff1a;背景 1. 简介 .NET 高级调试要想玩的好&#xff0c;看懂汇编是基本功&#xff0c;但看懂汇编和能写点汇编又完全是两回事&#xff0c;所以有时候看的多&#xff0c;总手痒痒想写一点&#xff0c;在 Windows 平台上搭建汇编环境不是那么容易&#xff0c;大多还是…

[附源码]Python计算机毕业设计SSM佳音大学志愿填报系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Mybatis日志配置(slf4j、log4j、log4j2)

文章目录1. Mybatis日志1.1 日志实现原理1.2 日志实现方式2. SLF4J2.1 slf4j日志级别2.2 日志门面与日志实现2.3 日志门面与日志依赖配置3. LOG4J3.1 日志级别3.2 log4j重要组件3.3 mybatis日志配置log4j3. LOG4J23.1 mybatis配置log4j23.2 log4j2配置文件1. Mybatis日志 1.1 …

elasticsearch集群数据索引迁移自动化脚本

日常维护elasticsearch集群会出现新老集群数据迁移,这里使用的是snapshot api是Elasticsearch用于对数据进行备份和恢复的一组api接口,可以通过snapshot api进行跨集群的数据迁移,原理就是从源ES集群创建数据快照,然后在目标ES集群中进行恢复。 1、新老集群修改集群配置文…