专业的编程技术博客社区

网站首页 > 博客文章 正文

HttpURLConnection丢失数据问题处理

baijin 2024-10-31 12:18:11 博客文章 7 ℃ 0 评论

前言

前几天遇到一个问题,系统需要从企业微信中获取企业微信的组织和用户信息,思路是从后台通过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方法进行数据读取,这种方式在数据量较小的情况下是可以读取到的,如果数据量大就会出现丢失数据的问题,在我本地测试的时候,可能是我测试的企业微信数据量较小,所以在我本地没有问题,但是在正式环境中,企业微信用户和组织数据多的时候就会出现问题了,所以大家在读取数据的时候尽量不要使用第一种方式,特此做个记录,和大家交流一下。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表