Springboot中request.getInputStream()獲取不到流解決辦法
阿新 • • 發佈:2018-12-09
問題描述
使用Springboot整合wpsoffice線上編輯儲存時獲取不到流。在Springboot程式啟動後,會預設新增OrderedCharacterEncodingFilter和HiddenHttpMethodFilter過濾器。在HiddenHttpMethodFilter過濾器中會呼叫request.getParameter(),從而造成我們在controller中通過request的InputStream無法讀取到RequestBody的資料。
解決辦法
1.使用@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")); } }
2.修改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); } }; } }