HttpServletRequest 参数解析

47 阅读1分钟
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();
    }
}