zoukankan      html  css  js  c++  java
  • 获取HttpServletRequest请求Body中的内容

    在实际开发过程中,经常需要从 HttpServletRequest 中读取HTTP请求的body内容,俗话说的好”好记性不如烂笔头“,特在此将其读取方法记录一下。

    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;
        }
     
    }

    注意:HttpServletRequest 请求中的 body 内容仅能调用 request.getInputStream(), request.getReader()和request.getParameter("key") 方法读取一次,重复读取会报 java.io.IOException: Stream closed 异常

    转自:https://blog.csdn.net/pengjunlee/article/details/79416687

  • 相关阅读:
    环境部署(二):Linux下安装jenkins
    环境部署(一):Linux下安装JDK
    jenkins简单安装及配置(Windows环境)
    python相关资料链接
    性能测试相关资料链接
    管理篇:测试Leader应该做哪些事
    进阶篇:软件测试工程师的岗位职责
    基础篇:如何做一名专业的软件测试工程师
    python:面向对象编程之Zope.interface安装使用
    Django:Python3.6.2+Django2.0配置MySQL
  • 原文地址:https://www.cnblogs.com/onelikeone/p/10071960.html
Copyright © 2011-2022 走看看