• 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

  • 相关阅读:
    MongoDB的查询
    商品订购及货物采购信息系统(代码分析)
    Java连接数据库(mysql,sqlserver)
    开通博客第一天
    Ubuntu下java环境的搭建
    商品订购及货物采购信息系统(需求分析)
    GitHub客户端发布托管代码
    property中copy和strong修饰符的使用指北
    iOS界面间传值
    GPUImage的滤镜功能一览表
  • 原文地址:https://www.cnblogs.com/nhdlb/p/11531786.html
Copyright © 2020-2023  润新知