????前幾天,由于公司的后臺管理系統(tǒng)要搭建restful服務,用來規(guī)范api和保持接口的可讀性吏夯,本以為簡簡單單就可以搞定的事情此蜈,結果花了一下午才搭建好,這里分享一下搭建中遇到的坑噪生。
????一裆赵。 在進行get和post請求時一切正常,但是在delete請求時跺嗽,發(fā)現客戶端報405錯誤战授,405是服務器不允許這個方法,報錯信息如下:
圖一
圖二
????可以看到這里發(fā)送了兩個請求桨嫁,一個options植兰,一個post,這個post請求是delete變得璃吧,網上查了下資料楣导,在進行跨域請求的時候,瀏覽器會自動的發(fā)送一個option請求畜挨,在接著發(fā)送你要發(fā)送的請求筒繁,解決方案如下:
圖三
????在Nginx中加上如下配置,但是加上后發(fā)現還是不行巴元,這個時候就有點懵逼了毡咏,問了下前端的同學,發(fā)現在Nginx中少了一個配置逮刨,如下所示:
圖四
????這里只有option,post,get方法呕缭,加上put和delete,至此修己,delete請求發(fā)送正常恢总。
????二。本以為delete請求都正常發(fā)送了箩退,put請求應該也能正常的發(fā)送离熏,但是,在測試put請求的時候戴涝,出現了拿不到參數的問題,這下有懵逼了钻蔑,明明delete請求都是好的啥刻,為什么put請求會出問題呢?
????后來咪笑,Google一下發(fā)現是springmvc的問題可帽,springmvc會把put請求攔截掉,所以拿不到參數窗怒,只要在web.xml中加上如下的攔截器處理一下就可以:
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>ROOT</servlet-name>
</filter-mapping>
????至此映跟,問題解決蓄拣。