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

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

{
    "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 {
    	File file = new File("src/main/java/com/znzdh/until/yingxiao.csv");
        FileOutputStream fos= new FileOutputStream(file);
        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=1;
        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 c27eacfe23-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<ProductDto> 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= productDtos.get(i);
                            System.out.println("product:"+product);
                            System.out.println("product:"+product.getDetaiName());
                            System.out.println("product:"+product.getInOutReasonStatus());
                            //保存在ArrayList中便利输入csv
                            ArrayList<String> arrayList = new ArrayList<>();
                            arrayList.add(product.getInOutReasonStatus());
                            for (int j = 0; j <arrayList.size() ; j++) {
                                System.out.println(arrayList.get(j));
                                fos.write(arrayList.get(j).getBytes());
                                fos.write("\n".getBytes());
                            }
                            
                        }
                    }

                }


                //响应状态==性能
                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/(a*0.9*1000)+"s");
                    System.out.println("95%平均响应时间:"+times/(a*0.95*1000)+"s");
                    System.out.println("100%平均响应时间:"+times/(a*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
输入csv文件中我要看的字段
csv
app上对应的字段
app1

还有别的获取字段的方式:因为返回的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(这也是这位大佬的)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值