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,然后问题解决。

posted @ 2022-09-14 11:02  会写BUG的运维狗  阅读(3435)  评论(0编辑  收藏  举报