• 035.[转] 获取HttpServletRequest请求Body中的内容


    注意:

    HttpServletRequest 请求中的 body 内容仅能调用 request.getInputStream(), request.getReader()和request.getParameter("key") 方法读取一次,重复读取会报 java.io.IOException: Stream closed 异常。
    原文:https://blog.csdn.net/pengjunlee/article/details/79416687

    public String getBodyString(HttpServletRequest request) throws IOException {
            StringBuilder sb = new StringBuilder();
            InputStream inputStream = null;
            BufferedReader reader = null;
            try {
                inputStream = request.getInputStream();
                reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
                String line = "";
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return sb.toString().trim();
        }
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
     
    import javax.servlet.ServletInputStream;
    import javax.servlet.http.HttpServletRequest;
     
    public class HttpServletRequestReader
    {
     
        // 字符串读取
        // 方法一
        public static String ReadAsChars(HttpServletRequest request)
        {
     
            BufferedReader br = null;
            StringBuilder sb = new StringBuilder("");
            try
            {
                br = request.getReader();
                String str;
                while ((str = br.readLine()) != null)
                {
                    sb.append(str);
                }
                br.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (null != br)
                {
                    try
                    {
                        br.close();
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
            return sb.toString();
        }
     
        // 方法二
        public static void ReadAsChars2(HttpServletRequest request)
        {
            InputStream is = null;
            try
            {
                is = request.getInputStream();
                StringBuilder sb = new StringBuilder();
                byte[] b = new byte[4096];
                for (int n; (n = is.read(b)) != -1;)
                {
                    sb.append(new String(b, 0, n));
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (null != is)
                {
                    try
                    {
                        is.close();
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
     
        }
     
        // 二进制读取
        public static byte[] readAsBytes(HttpServletRequest request)
        {
     
            int len = request.getContentLength();
            byte[] buffer = new byte[len];
            ServletInputStream in = null;
     
            try
            {
                in = request.getInputStream();
                in.read(buffer, 0, len);
                in.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (null != in)
                {
                    try
                    {
                        in.close();
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
            return buffer;
        }
     
    }

    ----------------------

            Enumeration enu=request.getParameterNames();  
            while(enu.hasMoreElements()){  
                String paraName=(String)enu.nextElement();  
                System.out.println(paraName+": "+request.getParameter(paraName));  
            } 
  • 相关阅读:
    MFC子窗体、父窗体
    私有云计算安全问题不容忽视
    云计算更多的是一种模式而不是技术
    原型模式向量的原型
    企业发票异常分析分离进项与销项
    考试系统框架搭建
    抽象工厂模式人与肤色
    工厂方法模式加密算法
    简单工厂模式女娲造人
    企业发票异常分析导入,清洗
  • 原文地址:https://www.cnblogs.com/badboyh2o/p/11229397.html
Copyright © 2020-2023  润新知