SpringBoot:SpringBoot項目中 HttpServletRequest ServletInputStream 讀取不到文件數據流

在Springboot程序啓動後,會默認添加OrderedCharacterEncodingFilterHiddenHttpMethodFilter過濾器。在HiddenHttpMethodFilter過濾器中會調用request.getParameter(),從而形成咱們在controller中經過request的InputStream沒法讀取到RequestBody的數據。以下:html

 

 

若是咱們讀取RequestBody的字節數據該怎麼辦呢?這裏介紹2種處理方式,推薦第一種方式:spring

1、使用@RequestBody註解springboot

@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 格式的表單數據app

 

2、修改HiddenHttpMethodFilter框架

既然HiddenHttpMethodFilter形成了InputStream在進入Controller以前被讀取,天然能夠經過修改HiddenHttpMethodFilter來避免這種狀況。添加springboot 配置文件,修改注入springboot的 HiddenHttpMethodFilter bean。ide

@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形成暫時沒法衡量的影響(*^_^*);最大的問題是要多寫不少代碼啊!post

 

文章轉載至:https://www.cnblogs.com/dw039/p/9445703.htmspa

相關文章
相關標籤/搜索