1. 程式人生 > >Springboot中request.getInputStream()獲取不到流解決辦法

Springboot中request.getInputStream()獲取不到流解決辦法

問題描述

使用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);
            }
        };
    }
}