注意:

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

  1. public String getBodyString(HttpServletRequest request) throws IOException {
  2. StringBuilder sb = new StringBuilder();
  3. InputStream inputStream = null;
  4. BufferedReader reader = null;
  5. try {
  6. inputStream = request.getInputStream();
  7. reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
  8. String line = "";
  9. while ((line = reader.readLine()) != null) {
  10. sb.append(line);
  11. }
  12. } catch (IOException e) {
  13. e.printStackTrace();
  14. } finally {
  15. if (inputStream != null) {
  16. try {
  17. inputStream.close();
  18. } catch (IOException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. if (reader != null) {
  23. try {
  24. reader.close();
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }
  30. return sb.toString().trim();
  31. }
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4.  
  5. import javax.servlet.ServletInputStream;
  6. import javax.servlet.http.HttpServletRequest;
  7.  
  8. public class HttpServletRequestReader
  9. {
  10.  
  11. // 字符串读取
  12. // 方法一
  13. public static String ReadAsChars(HttpServletRequest request)
  14. {
  15.  
  16. BufferedReader br = null;
  17. StringBuilder sb = new StringBuilder("");
  18. try
  19. {
  20. br = request.getReader();
  21. String str;
  22. while ((str = br.readLine()) != null)
  23. {
  24. sb.append(str);
  25. }
  26. br.close();
  27. }
  28. catch (IOException e)
  29. {
  30. e.printStackTrace();
  31. }
  32. finally
  33. {
  34. if (null != br)
  35. {
  36. try
  37. {
  38. br.close();
  39. }
  40. catch (IOException e)
  41. {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. return sb.toString();
  47. }
  48.  
  49. // 方法二
  50. public static void ReadAsChars2(HttpServletRequest request)
  51. {
  52. InputStream is = null;
  53. try
  54. {
  55. is = request.getInputStream();
  56. StringBuilder sb = new StringBuilder();
  57. byte[] b = new byte[4096];
  58. for (int n; (n = is.read(b)) != -1;)
  59. {
  60. sb.append(new String(b, 0, n));
  61. }
  62. }
  63. catch (IOException e)
  64. {
  65. e.printStackTrace();
  66. }
  67. finally
  68. {
  69. if (null != is)
  70. {
  71. try
  72. {
  73. is.close();
  74. }
  75. catch (IOException e)
  76. {
  77. e.printStackTrace();
  78. }
  79. }
  80. }
  81.  
  82. }
  83.  
  84. // 二进制读取
  85. public static byte[] readAsBytes(HttpServletRequest request)
  86. {
  87.  
  88. int len = request.getContentLength();
  89. byte[] buffer = new byte[len];
  90. ServletInputStream in = null;
  91.  
  92. try
  93. {
  94. in = request.getInputStream();
  95. in.read(buffer, 0, len);
  96. in.close();
  97. }
  98. catch (IOException e)
  99. {
  100. e.printStackTrace();
  101. }
  102. finally
  103. {
  104. if (null != in)
  105. {
  106. try
  107. {
  108. in.close();
  109. }
  110. catch (IOException e)
  111. {
  112. e.printStackTrace();
  113. }
  114. }
  115. }
  116. return buffer;
  117. }
  118.  
  119. }

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

  1. Enumeration enu=request.getParameterNames();
  2. while(enu.hasMoreElements()){
  3. String paraName=(String)enu.nextElement();
  4. System.out.println(paraName+": "+request.getParameter(paraName));
  5. }

035.[转] 获取HttpServletRequest请求Body中的内容的更多相关文章

  1. 获取HttpServletRequest请求Body中的内容

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

  2. javascript怎么获取指定url网页中的内容

    javascript怎么获取指定url网页中的内容 一.总结 一句话总结:推荐jquery中ajax,简单方便. 1.js能跨域操作么? javascript出于安全机制不允许跨域操作的. 二.用ph ...

  3. SpringMVC源码之Handler注册、获取以及请求controller中方法

    总结 对requestMappingHandlerMapping进行initializeBean时register Handler http开始请求时,initHandlerMappings,Disp ...

  4. linux shell 脚本获取和替换文件中特定内容

    1.从一串字符串中获取特定的信息 要求1:获取本机IP:menu.lst为系统镜象的IP配置文件,需要从中获取到本机IP信息(从文件获取信息) timeout title live find --se ...

  5. win32 获取 HotKey 控件中的内容(HKM_GETHOTKEY)

    windows给我们提供了一个对话框控件HotKey非常好用,在设置热键的时候用起来很爽,但是一直百度就是没找到在win32下怎样通过消息获取这个控件里面的内容,找到的都是用MFC封装好的控件类来操作 ...

  6. [技巧篇]11.JavaScript原生态如何获取浏览器请求地址中的参数

    var getAccessParams = function(){ var i,ilen,strs,keyName,keyValue, params={}, path = window.locatio ...

  7. 获取HTTP请求头中的地址

    技术交流群:233513714 public static String getIpAddr(HttpServletRequest request) { String ip = request.get ...

  8. [转]iOS技巧之获取本机通讯录中的内容,解析通讯录源代码

    一.在工程中添加AddressBook.framework和AddressBookUI.framework 二.获取通讯录 1.在infterface中定义数组并在init方法中初始化 ? 1 2 3 ...

  9. 正则获取 某段 DIV 中 的内容

    string html = "<div class='aa'><div class='left'>324324<div>dsfsdf</div> ...

随机推荐

  1. Ubuntu1804中重新认识docker

    这又是一篇充数的笔记……之前在Ubuntu中折腾过好几次了,但是关于他俩之间的故事总是参杂着第三者,不太纯粹,这一次只说她两之间的故事. 上一篇笔记弄好了Ubuntu环境.之后就是准备迎娶docker ...

  2. 如何在windows下安装linux双系统

    首先是看这篇博客,讲得很详细,但是有一点小小的区别,这里把整个过程回顾一下. https://www.cnblogs.com/masbay/p/10745170.html 第一步,刻盘,将一个u盘刻录 ...

  3. IT兄弟连 HTML5教程 CSS3属性特效 边框

    通过CSS3,我们能够创建圆角边框,向矩形添加阴影,使用图片来绘制边框.并且不需使用设计软件,比如photoshop. 1  边框图片border-image border-image为边框应用图片, ...

  4. 1.编译spring源码

    本文是作者原创,版权归作者所有.若要转载,请注明出处 下载spring源码,本文用的是版本如下: springframework 5.1.x,   IDE工具idea 2019.2.3    JAVA ...

  5. idea自用快捷键(非常实用)

    最近看了下idea的快捷键,不禁感慨idea真是太强大了,这里记录一下我常用的快捷键 Ctrl+F:在当前文件中查找 Ctrl+R:替换字符串 Alt + shift + 鼠标点击   多处同时编辑 ...

  6. C#中try catch中throw ex和throw方式抛出异常有何不同_异常捕获堆栈丢失问题

    前言,最近遇到一个使用try-catch异常捕获后记录一下日志,然后再抛出该异常后,异常堆栈里无法显示准确的堆栈地址的问题?   其实以前也遇到过类似问题,没有重视,这次好好研究了下,并上度娘上找了找 ...

  7. code snippet:依赖属性propa的小技巧

    很早之前就玩过VS里面的code snippet,相当方便. 今天在用prop自动属性代码时,无意中用了一下propa,然后就自动出来了依赖属性的代码片段,太方便了,尤其是对于WPF新手来说,比如我这 ...

  8. Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构

    Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留 ...

  9. vue-router精简demo

    cnpm install vue-router --save-dev 或者 cnpm install vue-router --save 全局引用VueRouter import VueRouter ...

  10. Zeus:1 Vulnhub Walkthrough

    主机层面扫描: ╰─ nmap -p1-65535 -sV -A 10.10.202.14 PORT STATE SERVICE VERSION21/tcp open ftp vsftpd 2.0.8 ...