在使用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的默認配置了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/176240.html
標籤:Java
