java自动化接口如何获取返回值中特定的字段HttpEntity类转换成实体类对象<搬代码>
创始人
2024-03-26 05:36:05
0

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

{"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放入接口中代码如下

    @Testpublic 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;//可关闭的httpablecloseCloseableHttpResponse 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 // 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包不多

        com.alibabafastjson1.2.68org.apache.httpcomponentshttpclient4.5.12org.apache.httpcomponentshttpcore4.4.13

其次,根据返回值构建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 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(这也是这位大佬的)

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...