使用Hutool
库来封装一个灵活通用的 HTTP
请求接口,可以根据不同的请求参数类型(如 Map
、JSON
、XML
等)动态处理,并支持传入请求方法、请求头和请求 URL,并返回响应体。通过这种方式,可以更高效地调用各种 RESTful API,适应不同的请求需求。
引入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.10</version>
</dependency>
创建通用请求方法
- 创建一个通用方法,可以传入请求方法、参数、头信息和 URL。此方法将根据传入的请求方法执行相应的 HTTP 请求,并返回响应体。
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import cn.hutool.json.JSONObject;
import java.util.Map;
public class HttpClientUtil {
/**
* 发送HTTP请求
*
* @param method 请求方法 (GET, POST, PUT, DELETE等)
* @param url 请求的URL
* @param params 请求参数,可以是Map、JSON、XML字符串等
* @param headers 请求头,可以是Map
* @return 返回响应体内容
*/
public static String sendRequest(String method, String url, Object params, Map<String, String> headers) {
// 将字符串方法转换为Hutool的Method枚举类型
Method httpMethod = Method.valueOf(method.toUpperCase());
// 创建请求对象
HttpRequest request = HttpUtil.createRequest(httpMethod, url);
// 设置请求参数
if (params != null) {
if (params instanceof Map) {
// 适用于GET请求或POST表单请求
request.form((Map<?, ?>) params);
} else if (params instanceof JSONObject) {
// 适用于JSON格式的请求体
request.body(params.toString());
} else if (params instanceof String) {
// 适用于直接传递XML、JSON字符串等格式
request.body((String) params);
}
}
// 设置请求头
if (headers != null) {
request.addHeaders(headers);
}
// 发送请求并获取响应
HttpResponse response = request.execute();
// 返回响应体
return response.body();
}
}
使用
- 发送一个 POST 请求,并传递一些参数和请求头
import cn.hutool.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String url = "https://www.dzy.com/testapi";
String method = "POST";
// 设置请求参数
JSONObject params = new JSONObject();
params.put("username", "zy");
params.put("tile", "test");
params.put("userId", 1);
// 设置请求头
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
// 发送请求并获取响应体
String response = HttpClientUtil.sendRequest(method, url, params, headers);
System.out.println(response);
}
}
HttpUtil.createRequest()
:根据传入的请求方法和 URL 创建一个请求对象。request.form()
:当请求参数是 Map 时,用 form() 方法添加参数,这在 POST 表单提交时常用。request.body()
:当请求参数是 JSON 对象时,用 body() 方法直接设置请求体。request.addHeaders()
:用于添加请求头信息。response.body()
:获取响应的内容。