SpringBoot rest映射及源码解析
一、rest使用與原理
? @xxxMapping;
? Rest風(fēng)格支持(使用HTTP請(qǐng)求方式動(dòng)詞來表示對(duì)資源的操作)
? 以前:/getUser 獲取用戶 /deleteUser 刪除用戶 /editUser 修改用戶 /saveUser 保存用戶
? 現(xiàn)在: /user GET-獲取用戶 DELETE-刪除用戶 PUT-修改用戶 POST-保存用戶
? 核心Filter;HiddenHttpMethodFilter(SpringMVC就要配置這個(gè),才能開啟delete和put的隱藏于請(qǐng)求)
? 用法: 表單method=post,隱藏域 _method=put
? SpringBoot在配置文件中手動(dòng)開啟
我們都知道,form表單只能發(fā)get/post兩種請(qǐng)求,那么springboot底層是如果實(shí)現(xiàn)delete和put請(qǐng)求呢,那就是增加隱藏域:
<form action="/user" method="get"><input value="REST-GET 提交" type="submit"/> </form> <form action="/user" method="post"><input value="REST-POST 提交" type="submit"/> </form> <form action="/user" method="post"><!--增加隱藏域--><input name="_method" type="hidden" value="delete"/><input value="REST-DELETE 提交" type="submit"/> </form> <form action="/user" method="post"><input name="_method" type="hidden" value="PUT"/><input value="REST-PUT 提交" type="submit"/> </form>那么底層源碼如何解析的?
二、從WebMvcAutoConfiguration類說起
SpringMVC的大都數(shù)功能都集中在SpringBoot的WebMvcAutoConfiguration類中,所以直接來到這個(gè)類看
可以看到上圖中ALLOWED_METHODS中允許的方法如下:
開啟頁(yè)面表單的Rest功能
三、 HttpMethodRequestWrapper
上面說了,最終的請(qǐng)求會(huì)經(jīng)過 HttpMethodRequestWrapper的包裝,在返回到控制器中繼續(xù)流程,那就來看看HttpMethodRequestWrapper這個(gè)類。
四、總結(jié)
- Rest原理(表單提交要使用REST的時(shí)候)
- 表單提交會(huì)帶上_method=PUT
- 請(qǐng)求過來被HiddenHttpMethodFilter攔截
- 請(qǐng)求是否正常,并且是POST
- 獲取到_method的值。
- 兼容以下請(qǐng)求;PUT.DELETE.PATCH
- 原生request(post),包裝模式requesWrapper重寫了getMethod方法,返回的是傳入的值。
- 過濾器鏈放行的時(shí)候用wrapper。以后的方法調(diào)用getMethod是調(diào)用requesWrapper的。
- Rest使用客戶端工具,
? 如PostMan直接發(fā)送Put、delete等方式請(qǐng)求,無需Filter。
需要注意的是:現(xiàn)在都是前后端分離,很少這樣使用了。
總結(jié)
以上是生活随笔為你收集整理的SpringBoot rest映射及源码解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入职新公司,如何快速上手公司业务?
- 下一篇: SpringBoot中请求映射的原理(源