<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Spring Boot支援Rest風格:使用HTTP請求方式的動詞來表示對資源的操作
以前這樣寫介面:
/getUser 獲取使用者 /deleteUser 刪除使用者 /updateUser 修改使用者 /saveUser 儲存使用者
@RequestMapping(value = "/getUser", method = RequestMethod.GET) public String getUser() { return "GET"; } @RequestMapping(value = "/deleteUser", method = RequestMethod.POST) public String deleteUser() { return "POST"; } @RequestMapping(value = "/updateUser", method = RequestMethod.POST) public String updateUser() { return "POST"; } @RequestMapping(value = "/saveUser", method = RequestMethod.POST) public String saveUser() { return "POST"; }
使用Rest風格,則這樣寫介面:
/user GET-獲取使用者 DELETE-刪除使用者 PUT-修改使用者 POST-儲存使用者
@GetMapping("/user") public String getUser() { return "GET"; } @PostMapping("/user") public String saveUser() { return "POST"; } @PutMapping("/user") public String putUser() { return "PUT"; } @DeleteMapping("/user") public String deleteUser() { return "DELETE"; }
通過表單方式提交請求,請求型別只能支援Get與Post
若表單提交要使用REST風格,則表單請求方式使用Post,新增隱藏域 _method=put、 _method=delete方式來支援Rest風格
範例如下:
<form action="/user" method="post"> <input name="_method" type="hidden" value="delete"/> <input value="REST提交" type="submit"/> </form>
SpringBoot組態檔中開啟頁面表單的Rest功能
spring: mvc: hiddenmethod: filter: enabled: true
首先是從自動設定類WebMvcAutoConfiguration
開始,其中的hiddenHttpMethodFilter
方法入手,請求首先被該方法攔截
接著建立OrderedHiddenHttpMethodFilter
物件,其又繼承HiddenHttpMethodFilter
HiddenHttpMethodFilter
中的doFilterInternal
核心方法進行了相關攔截操作,要求是Post請求並且請求正常,然後獲取請求引數_method
request.getParameter(this.methodParam)
從請求中獲取_method
引數進行判斷攔截,故可修改預設_method
,自定義隱藏引數。
@Bean public HiddenHttpMethodFilter hiddenHttpMethodFilter() { HiddenHttpMethodFilter methodFilter = new HiddenHttpMethodFilter(); methodFilter.setMethodParam("_mymethod"); return methodFilter; }
首先一個請求肯定會經過HttpServlet
類的doGet()
或doPost()
等方法,當然不一定會執行,但其子類肯定會有對其的具體實現,其實現類如下:
推測+大概看原始碼得出Spring Boot的一個請求會經過FrameworkServlet
類的doGet()
方法
processRequest
方法又呼叫了doService方法
doService方法是一個介面,FrameworkServlet
並沒有具體實現
不過DispatcherServlet
對其經行了具體實現,doService方法中又呼叫doDispatch
核心請求分發方法
doDispatch方法中又尋找當前請求使用哪個Handler(處理器對映器)
Spring Boot預設已設定有如下5種處理器對映器。這裡會挨個嘗試所有的HandlerMapping看是否有匹配的請求
在Spring Boot啟動時,相關處理器對映器已經將請求關係進行了繫結,儲存了所有@RequestMapping 和handler的對映規則
如下:某Controller層的/index
請求方法就與RequestMappingHandlerMapping
進行了關聯絡結
接著再執行mapping.getHandler(request)
執行this.getHandlerInternal(request)
,來到AbstractHandlerMethodMapping
類重寫的方法
執行 super.getHandlerInternal(request);
得到當前請求Path
執行this.lookupHandlerMethod(lookupPath, request);
進行判斷當前請求的是具體那個方法,即請求對應的handler,找到後並返回。
到此,Spring Boot的請求對映過程解析完畢。
最終,請求對映過程中涉及的類如下:
到此這篇關於Java Spring Boot請求方式與請求對映過程分析的文章就介紹到這了,更多相關Spring Boot請求對映內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45