欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

POST请求数据量过大解决方案_JAVA

程序员文章站 2024-01-26 22:07:11
...
String param = ParamsUtil.getStreamToString(getRequest()); // 接收流参数并转成字符串
Map<String, String> params = ParamsUtil.getUrlParams(param); // 将字符串参数转Map

import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class ParamsUtil {
    /**
     * 将url参数转换成map
     * @param param aa=11&bb=22&cc=33
     * @return
     */
    public static Map<String, String> getUrlParams(String param) {
        Map<String, String> map = new HashMap<>(0);
        if (StringUtils.isBlank(param)) {
            return map;
        }
        String[] params = param.split("&");
        for (int i = 0; i < params.length; i++) {
            int index = params[i].indexOf("=");
            if (index != -1) {
                map.put(params[i].substring(0, index), params[i].substring(index+1));
            }
        }
        return map;
    }

    /**
     * 将map转换成url
     * @param map
     * @return
     */
    public static String getUrlParamsByMap(Map<String, Object> map) {
        if (map == null) {
            return "";
        }
        StringBuffer sb = new StringBuffer();
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            sb.append(entry.getKey() + "=" + entry.getValue());
            sb.append("&");
        }
        String s = sb.toString();
        if (s.endsWith("&")) {
            s = org.apache.commons.lang.StringUtils.substringBeforeLast(s, "&");
        }
        return s;
    }

    /**
     * 以流的方式接收参数, 并转成字符串
     * @param request
     * @return
     */
    public static String getStreamToString(HttpServletRequest request) {

        try {
            InputStream inputStream;
            inputStream = request.getInputStream();

            //建立接收流缓冲,准备处理
            StringBuffer requestBuffer = new StringBuffer();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
            //读入流,并转换成字符串
            String readLine;
            while ((readLine = reader.readLine()) != null) {
                requestBuffer.append(readLine);

            }
            reader.close();
            return java.net.URLDecoder.decode(requestBuffer.toString(), "utf-8");
        } catch(Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}

还有一种说法是修改tomcat配置文件

maxPostSize="-1"   // tomcat7+

maxPostSize="0"   // tomcat7-