SpringBoot Controller 中 HttpServletRequest ServletInputStream 读取不到文件数据流的处理方式
时间:2019-09-17
本文章向大家介绍SpringBoot Controller 中 HttpServletRequest ServletInputStream 读取不到文件数据流的处理方式,主要包括SpringBoot Controller 中 HttpServletRequest ServletInputStream 读取不到文件数据流的处理方式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在Springboot程序启动后,会默认添加OrderedCharacterEncodingFilter和HiddenHttpMethodFilter过滤器。在HiddenHttpMethodFilter过滤器中会调用request.getParameter(),从而造成我们在controller中通过request的InputStream无法读取到RequestBody的数据。如下:
如果我们读取RequestBody的字节数据该怎么办呢?这里介绍2种处理方式,推荐第一种方式:
一、使用@RequestBody注解
@RestController @RequestMapping(value = "dtu") public class HomeController { public static String InputData; public static SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); @PostMapping("/post") public void post(@RequestBody byte[] data) { InputData = "POST收到数据的时间:" + format.format(new Date()) + "<br />**********收到的数据**********<br />" + new String(data, 0, data.length, Charset.forName("UTF-8")); } }
注意:亲测 @RequestBody 无法读取 multipart/form-data 格式的表单数据
二、修改HiddenHttpMethodFilter
既然HiddenHttpMethodFilter造成了InputStream在进入Controller之前被读取,自然可以通过修改HiddenHttpMethodFilter来避免这种情况。添加springboot 配置文件,修改注入springboot的 HiddenHttpMethodFilter bean。
@Configuration public class WebConfig { @Bean public HiddenHttpMethodFilter hiddenHttpMethodFilter() { return new OrderedHiddenHttpMethodFilter(){ @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { filterChain.doFilter(request, response); } }; } }
第二种修改方式标本兼治,但是它侵入式的修改影响了springboot框架默认配置,也会对非必需读取RequestBody数据的Controller造成暂时无法衡量的影响(*^_^*);最大的问题是要多写很多代码啊!
文章转载至:https://www.cnblogs.com/dw039/p/9445703.htm
原文地址:https://www.cnblogs.com/nhdlb/p/11531786.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PAT (Basic Level) Practice (中文)1054 求平均值 (20 分)
- zookeeper集群的搭建
- 【Java】07 常见 API
- 【Java】04 数组
- hadoop分布式格式化时出现异常java.net.unknownhostexception
- 【Java】05 面向对象
- 【Java】08 集合
- PAT (Advanced Level) Practice 1001 A B Format (20 分)
- 【Java】09 List 集合与 Collections 工具类
- PAT (Advanced Level) Practice 1003 Emergency (25 分)
- 数据结构严书习题6.65已知前中序,求二叉链表
- 【Java】10 Deque 接口
- 12.深入k8s:kubelet创建pod流程源码分析
- (较为详细)树的遍历方式一览(附完整源码可在VScode与cb运行)
- 【Java】12 Map 集合