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