一、问题
在某个项目中,对接方提供了一个方法,但是GET方式提交Body数据,之前确实听说过GET方法可以传body数据,但是并没有实操过,因此花了好多的时间去解决。
百度了很久,有一些较为有用的信息,在这边记录一下,以免下次再遇到。
项目就是最基础的Spring Boot框架,没什么特殊的。
二、处理
1、ApacheHttpClient
项目原本引用的是ApacheHttpClient,但研究了许久,更新到最新的4.5.10,并未发现HttpGet中有setEntity方法(一般postByJson方法将body塞到Entity里即可),感觉可能是并不支持get传递body数据,试了很久,最终放弃。
2、AsyncHttpClient
找了一些资料,说是AsyncHttpClient有get传递body的方法,因此还是在项目里导入了AsyncHttpClient的依赖。
<dependency> <groupId>org.asynchttpclient</groupId> <artifactId>async-http-client</artifactId> <version>2.10.4</version> </dependency>
同步请求,因此也没有特别的处理。
// 构建client AsyncHttpClient client = new DefaultAsyncHttpClient(); // 由于请求传参是json String jsonBody = "{\"page\":{\"page\":1,\"size\":10}}"; Future<Response> feature = client.prepareGet(url) .setBody(jsonBody) .setHeader("Content-Type","application/json;charset=UTF-8") .execute(); // 发起请求 Response response = feature.get(); // 获取返回值 String result = response.getResponseBody();
结果在responseBody里面。