网站首页 > 博客文章 正文
前言
前几天遇到一个问题,系统需要从企业微信中获取企业微信的组织和用户信息,思路是从后台通过HttpURLConnection调用企业微信的获取组织和用户信息的API接口,然后再用fastjson进行解析,然后存入数据库中,既然思路确认了就开始做吧。
第一版代码
URL urlGet = new URL(url);
HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
http.setRequestMethod("GET");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000");
http.connect();
InputStream is = http.getInputStream();
int size = is.available();
byte[] jsonBytes = new byte[size];
is.read(jsonBytes);
String message = new String(jsonBytes, "UTF-8");
JSONObject demoJson = JSONObject.parseObject(message);
以上代码就是我的第一版获取数据的代码,在本地测试,使用测试企业微信,用户和组织都可以获取到并能解析成功,但是发布到正式环境中出现了问题,接口可以调用成功,也可以返回数据,但是解析的时候一直报错,一直是json解析错误,检查了好久都没有发现问题所在,然后去网上搜了一下原因,原来是我虽然调用接口成功了,但是返回的数据在接收过程中出现了数据丢失,好吧,既然问题找到了,那么就把方法修改一下吧。
第二版代码
URL urlGet = new URL(url);
HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
http.setRequestMethod("GET");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000");
http.connect();
InputStream is = http.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
StringBuffer sb = new StringBuffer("");
String temp;
while ((temp = br.readLine()) != null) {
sb.append(temp);
}
if (is != null) {
is.close();
}
if (br != null) {
br.close();
}
JSONObject demoJson = JSONObject.parseObject(sb.toString());
好了,这是我修改完毕后的代码,在本地测试了一下没有问题,可以获取到并能解析成功,发布到正式服务器上试试吧,在测试过程中也没有出现问题,大功告成,代码修改完毕。
心得
在第一版中使用read方法进行数据读取,这种方式在数据量较小的情况下是可以读取到的,如果数据量大就会出现丢失数据的问题,在我本地测试的时候,可能是我测试的企业微信数据量较小,所以在我本地没有问题,但是在正式环境中,企业微信用户和组织数据多的时候就会出现问题了,所以大家在读取数据的时候尽量不要使用第一种方式,特此做个记录,和大家交流一下。
猜你喜欢
- 2024-10-31 英雄联盟手游错误代码100008什么原因?LOL手游错误代码解决办法
- 2024-10-31 玩转网络自动化之ntc_templates模块
- 2024-10-31 C#程序与单片机通信时,如何自动初始化串口(2)?
- 2024-10-31 电机驱动_上位机_ModbusRTU通讯(伺服上位机)
- 2024-10-31 真实的线上故障处理案例(在线故障检测时应注意什么)
- 2024-10-31 问题反馈:为什么Cydia加载出现那么多红色错误?
- 2024-10-31 Norland诺兰德连接超时连接报错?一招解决连接问题
- 2024-10-31 处理超时订单(超时未付款)的解决方案
- 2024-10-31 第一后裔运行超时运行报错怎么办?一招解决运行问题
- 2024-10-31 基于 PTS 压测轻松玩转问题诊断(tps压测 指什么)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)