使用AsyncHttpClient,因为AsyncHttpClient支持GET方法带有Body的调用。
1.引入maven依赖
org.asynchttpclient
async-http-client
2.2.0
测试demo
public static String get(String url, String bodyData) {
// 构建请求
AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient();
BoundRequestBuilder requestBuilder = asyncHttpClient.prepareGet(url).setBody(bodyData);
List<Response> list = new ArrayList<>();
requestBuilder.execute()
.toCompletableFuture()
.thenAccept(list::add)
.join();
if (list.isEmpty()) {
return null;
}
Response response = list.get(0);
if (response.getStatusCode() != 200) {
return null;
}
return response.getResponseBody();
}
1.方法可以返回map,增加:new ObjectMapper().readValue(response.getResponseBody(), Map.class);
2.方法本身必须返回json 对象的string才行,不能是非json对象的string,否则解析异常。
备注2:
1.没有body的get方法,去掉.setBody(bodyData)即可。
2.没有header的get方法调用,去掉headers.forEach(requestBuilder::addHeader);即可。
带headers请求
public static String get(String url, String bodyData, Map<String, String> headers) throws Exception {
// 构建请求
BoundRequestBuilder requestBuilder = asyncHttpClient.prepareGet(url).setBody(bodyData);
headers.forEach(requestBuilder::addHeader);
List list = new ArrayList<>();
requestBuilder.execute()
.toCompletableFuture()
.thenAccept(list::add)
.join();
if (list.isEmpty()) {
return null;
}
Response response = list.get(0);
if (response.getStatusCode() != 200) {
return null;
}
return response.getResponseBody();
}
https://www.jianshu.com/p/220d2267cdc9