hutool工具httpRequest大坑
这几天用java写了个接口调es的对外接口查询es的索引数据,发送请求用的hutool的http工具包,项目启动后一直报错json未能正确结束。代码如下:
public static String getEsInter(String url, String scroll_id, String scroll) {
String result = "";
JSONObject param = new JSONObject();
param.putOnce("scroll_id", scroll_id);
param.putOnce("scroll", scroll);
HttpRequest request = HttpRequest.post(url)
.header("Content-Type", "application/json")
.body(param.toString());
result = request.execute().body();
return result;
}
debug发现返回的result长度在1000左右,开始以为是字符串过长被es截断了,但是后来想想用postman返回的数据是正常的。然后百度“接口返回字符串被截断”,看了几篇后发现发现不对。于是再次调试,发现每次请求截断的位置都不一样,但是相同结果截断的位置是相同的(因为我做了scroll,所以从头开始查每批次结果相同)。后来看hutool的源码,发现返回的字符串是通过byte[]
转换过来的,于是百度“byte[]转String数据丢失”,有篇文章说转换是遇到“\0”会被转换为结束字符,如果想要不提前结束,需要自己写迭代逐个字符解析。因为是第三方包,而且不确定是不是这个问题。我决定换成okhttp,然后问题解决。