public class HttpRequestUtil {
// 处理 GET 请求的参数
public static Map<String, Object> parseGetParameters(HttpServletRequest request) {
System.out.println("GET Request Parameters:")
Map<String, Object> objMap = new HashMap<>()
Map<String, String[]> parameterMap = request.getParameterMap()
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
String key = entry.getKey()
String[] values = entry.getValue()
for (String value : values) {
System.out.println(key + ": " + value)
}
objMap.put(entry.getKey(), (Object) entry.getValue())
}
return objMap
}
// 处理 POST/PUT 请求的参数
public static <T> T parsePostPutParameters(HttpServletRequest request) {
String contentType = request.getContentType()
System.out.println("Content-Type: " + contentType)
if (contentType != null) {
if (contentType.startsWith("application/x-www-form-urlencoded")) {
// 解析表单提交的参数
return (T) parseFormData(request)
} else if (contentType.startsWith("application/json")) {
// 解析 JSON 格式的请求体
return (T) parseRequestBody(request)
} else if (contentType.startsWith("multipart/form-data")) {
// 解析 multipart/form-data 格式的请求体
return (T) parseMultipartFormData(request)
} else {
System.out.println("Unsupported Content-Type: " + contentType)
}
}
return null
}
// 处理 form-data 请求
private static Map<String, String[]> parseFormData(HttpServletRequest request) {
System.out.println("Form Parameters:")
Enumeration<String> names = request.getParameterNames()
Map<String, String[]> parameterMap = request.getParameterMap()
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
String key = entry.getKey()
String[] values = entry.getValue()
for (String value : values) {
System.out.println(key + ": " + value)
}
}
return parameterMap
}
// 处理 multipart/form-data 请求
private static Map<String, Object> parseMultipartFormData(HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request
Map<String, Object> formData = new HashMap<>()
// 解析表单字段
Map<String, String[]> parameterMap = multipartRequest.getParameterMap()
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
String key = entry.getKey()
String[] values = entry.getValue()
for (String value : values) {
System.out.println(key + ": " + value)
}
formData.put(key, values)
}
// 解析文件字段
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap()
for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
String key = entry.getKey()
MultipartFile file = entry.getValue()
formData.put(key, file)
}
return formData
}
// 读取请求体内容
private static String parseRequestBody(HttpServletRequest request) {
System.out.println("JSON Parameters:")
StringBuilder body = new StringBuilder()
try (BufferedReader reader = request.getReader()) {
String line
while ((line = reader.readLine()) != null) {
body.append(line)
}
} catch (IOException e) {
e.printStackTrace()
}
return body.toString()
}
public static Map<String, String> parseHeaders(HttpServletRequest request) {
Map<String, String> headersMap = new HashMap<>()
// 获取请求头的所有名称
Enumeration<String> headerNames = request.getHeaderNames()
// 遍历每个请求头
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement()
String headerValue = request.getHeader(headerName)
headersMap.put(headerName, headerValue)
}
return headersMap
}
public static RequestModel getRequestModel(HttpServletRequest request) {
RequestModel requestModel = new RequestModel()
requestModel.setHeaders(HttpRequestUtil.parseHeaders(request))
String method = request.getMethod()
requestModel.setMethod(Method.valueOf(method.toUpperCase()))
String path = request.getRequestURL().toString()
requestModel.setUrl(path)
// 根据请求方式解析参数
if ("GET".equalsIgnoreCase(method)) {
requestModel.setForm(HttpRequestUtil.parseGetParameters(request))
} else if ("POST".equalsIgnoreCase(method) || "PUT".equalsIgnoreCase(method)) {
Object o = HttpRequestUtil.parsePostPutParameters(request)
if (o instanceof String) {
requestModel.setBody((String) o)
} else {
requestModel.setForm((Map) o)
}
}
return requestModel
}
}
@Data
public class RequestModel {
private String url
private Method method
private String body
private Map<String, Object> form
private Map<String, String> headers
public HttpResponse exec() {
HttpRequest request = HttpUtil.createRequest(method, url)
if (method != Method.GET) {
request = request.body(body)
request = request.form(form)
}
if (method == Method.GET) {
request = request.form(form)
}
request.addHeaders(headers)
return request.execute()
}
}