SpringBoot 2.x 版本以put方式提交表單不生效的問題詳解


在使用SpringBoot 2.x版本時,原有springboot 1.x 版本的通過在表單中添加 input框隱藏域指定_method = put 的方式失效。

 

 

 

雖然瀏覽器傳參的確是帶上了這個參數,但是打斷點會發現服務端依然走的是標注@PostMapping的Controller方法,而不是我們期待的標注@PutMapping的Controller方法,為什么會這樣?

 

傳統的springMVC中,我們需要在配置文件中添加HiddenHttpMethodFilter配置,就可以支持除get、post以外的http請求方式,比如本案例中的put。

    <filter>
        <filter-name>HttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

springboot則對springMVC做了加強改造,很多東西都做了自動配置,是不需要我們自己配置的,xml配置文件更是不需要了。

那么我們來看一看springboot的springMVC模塊的自動配置是怎么處理的。

 

我們打開WebMvcAutoConfiguration.class這個文件,發現這個類里頭第一個組件就是關於hiddenmethod的配置,spring.mvc.hiddenmethod.filter.enabled默認是個false,在這個方法里new 了一個

OrderedHiddenHttpMethodFilter對象,而OrderedHiddenHttpMethodFilter正是繼承的我們要配置的HiddenHttpMethodFilter。

 

 

 

 

 

於是解決辦法就很簡單了,在yml配置文件中配置spring.mvc.hiddenmethod.filter.enabled = ture 即可。

 

 

當然我們注意到OrderedHiddenHttpMethodFilter這個組件上還有 @ConditionalOnMissingBean(HiddenHttpMethodFilter.class)

也就是說,如果我們還想進一步擴展,添加一些自定義功能的話,也可以自己寫一個HiddenHttpMethodFilter,並將其加載到spring容器中,就可以覆蓋掉springboot的默認配置了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM