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

  • 相关阅读:
    Ubuntu安装软件问题的解决
    寻找两个字符串中最长的公共部分字符串
    CentOS
    vim自定义配置
    git创建远程仓库以及在本地提交到远程仓库的方法
    黑金开发板在NiosII环境下烧写image到flash失败的解决办法
    f.lux 一款免费的护眼开源软件
    python 制作自动化脚本
    修改python 默认的存储路径
    第一篇博客
  • 原文地址:https://www.cnblogs.com/onelikeone/p/10071960.html
Copyright © 2011-2022 走看看