第一看一下返回值是什么样子的:
{
"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文件模拟页面查询)**
第四步:就是编写读取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
//===========================
}
输出结果如下截图:
还有别的获取字段的方式:因为返回的json串不一样,以下是别人的会带上链接
参考如下两位大佬:
https://blog.csdn.net/weixin_45481406/article/details/106062405
http://t.csdn.cn/kglhD
一:
http://t.csdn.cn/kglhD
最近在写使用java后端去请求第三方接口的代码,给大家分享关于HttpEntity类的处理方式,而处理请求是需要根据第三方的要求来处理的,所以这里着重展示HttpEntity的处理。
在开始代码前,需要知晓几个前提:
第三方接口已经开放,并且已经获得使用的权限
应经拿到接口的数据,包括需要传入的参数和返回值
json串如下:
根据第三方提供的SDK导入对应的jar包
然后根据接口返回值构建对应的实体类:
然后根据第三方的用例进行请求:
二:
https://blog.csdn.net/weixin_45481406/article/details/106062405
最近在写使用java后端去请求第三方接口的代码,给大家分享关于HttpEntity类的处理方式,而处理请求是需要根据第三方的要求来处理的,所以这里着重展示HttpEntity的处理。
在开始代码前,需要知晓几个前提:
第三方接口已经开放,并且已经获得使用的权限
应经拿到接口的数据,包括需要传入的参数和返回值
首先展示我这个文档需要用到的接口参数和返回值,我将用这个接口来进行演示
然后需要导入几个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(这也是这位大佬的)