zoukankan      html  css  js  c++  java
  • SpringBoot:SpringBoot项目中 HttpServletRequest ServletInputStream 读取不到文件数据流

    在Springboot程序启动后,会默认添加OrderedCharacterEncodingFilterHiddenHttpMethodFilter过滤器。在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

  • 相关阅读:
    leetcode33. Search in Rotated Sorted Array
    pycharm 设置sublime text3 monokai主题
    django class Meta
    leetcode30, Substring With Concatenation Of All Words
    Sublime text3修改tab键为缩进为四个空格,
    sublime text3 python打开图像的问题
    安装上imesupport输入法依然不跟随的解决办法,
    sublime text3 的插件冲突弃用问题,
    sublime text3 BracketHighlighter括号匹配的设置
    windows 下wget的使用
  • 原文地址:https://www.cnblogs.com/nhdlb/p/11531786.html
Copyright © 2011-2022 走看看