javascript
SpringMVC--RequestMapping说明RestFul 风格小黄鸭调试法
1. @RequestMapping
- @RequestMapping注解用于映射url到控制器類或一個特定的處理程序方法。可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
1.1 只注解在方法上面
@Controller public class TestController {@RequestMapping("/h1")public String test(){return "test";} }訪問路徑:http://localhost:8080 / 項目名 / h1
1.2 同時注解類與方法
@Controller @RequestMapping("/admin") public class TestController {@RequestMapping("/h1")public String test(){return "test";} }訪問路徑:http://localhost:8080 / 項目名/ admin /h1 , 需要先指定類的路徑再指定方法的路徑;
2. RestFul 風格
2.1 概念
Restful就是一個資源定位及資源操作的風格。不是標準也不是協議,只是一種風格。基于這個風格設計的軟件可以更簡潔,更有層次,更易于實現緩存等機制。
2.2 功能
- 資源:互聯網所有的事物都可以被抽象為資源
- 資源操作:使用POST、DELETE、PUT、GET,使用不同方法對資源進行操作。
- 分別對應 添加、 刪除、修改、查詢。
2.2.1 傳統方式操作資源 :
通過不同的參數來實現不同的效果!方法單一,post 和 get
http://127.0.0.1/item/queryItem.action?id=1 查詢,GEThttp://127.0.0.1/item/saveItem.action 新增,POSThttp://127.0.0.1/item/updateItem.action 更新,POSThttp://127.0.0.1/item/deleteItem.action?id=1 刪除,GET或POST2.2.2 使用RestFul操作資源
可以通過不同的請求方式來實現不同的效果!如下:請求地址一樣,但是功能可以不同!
http://127.0.0.1/item/1 查詢,GEThttp://127.0.0.1/item 新增,POSThttp://127.0.0.1/item 更新,PUThttp://127.0.0.1/item/1 刪除,DELETE2.3 測試
2.3.1新建一個類 RestFulController
import org.springframework.stereotype.Controller;@Controller public class RestFulController { }2.3.2 在Spring MVC中可以使用 @PathVariable 注解,讓方法參數的值對應綁定到一個URI模板變量上。
RestFulController.java
package com.tian.controller;import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;@Controller public class RestFulController {// 映射訪問路徑@RequestMapping("/commit/{p1}/{p2}")public String index(@PathVariable int p1, @PathVariable int p2, Model model) {int result = p1 + p2;//Spring MVC會自動實例化一個Model對象用于向視圖中傳值model.addAttribute("msg", "結果為: " + result);//返回視圖位置return "test";} }2.3.3 編寫前端test.jsp,注意在WEB-INF/jsp目錄下編寫,對應我們的視圖解析器
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body> ${msg} </body> </html>2.3.4 啟動TomCat測試
2.3.5 小結:使用路徑變量的好處
- 使路徑變得更加簡潔;
- 獲得參數更加方便,框架會自動進行類型轉換。
- 通過路徑變量的類型可以約束訪問參數,如果類型不一樣,則訪問不到對應的請求方法,如這里訪問是的路徑是/commit/1/a,則路徑與方法不匹配,而不會是參數轉換失敗。
- 更加安全
2.3.6 我們來修改下對應的參數類型,再次測試
int-->String
package com.tian.controller;import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;@Controller public class RestFulController {// 映射訪問路徑@RequestMapping("/commit/{p1}/{p2}")public String index(@PathVariable String p1, @PathVariable String p2, Model model) {String result = p1 + p2;//Spring MVC會自動實例化一個Model對象用于向視圖中傳值model.addAttribute("msg", "結果為: " + result);//返回視圖位置return "test";} }運行結果:
2.3.6 使用method屬性指定請求類型
用于約束請求的類型,可以收窄請求范圍。指定請求謂詞的類型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等
2.3.6.1 增加一個方法(參數value 和path等同)
//映射訪問路徑,必須是POST請求@RequestMapping(value = "/hello",method = {RequestMethod.POST})public String index2(Model model){model.addAttribute("msg", "hello!");return "test";}2.3.6.2 我們使用瀏覽器地址欄進行訪問默認是Get請求,會報錯405:
2.3.6.3 如果將POST修改為GET則正常了;
2.3.6.4 小結
Spring MVC 的 @RequestMapping 注解能夠處理 HTTP 請求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。
如果不配置method, 則以任何請求形式 如: RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.PATCH, RequestMethod.DELETE都可以訪問得到。
所有的地址欄請求默認都會是 HTTP GET 類型的。
2.3.6.5 方法級別的注解變體有如下幾個:組合注解
@GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping@GetMapping 是一個組合注解,平時使用的會比較多!它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一個快捷方式。
3. 小黃鴨調試法
場景一:我們都有過向別人(甚至可能向完全不會編程的人)提問及解釋編程問題的經歷,但是很多時候就在我們解釋的過程中自己卻想到了問題的解決方案,然后對方卻一臉茫然。
場景二:你的同行跑來問你一個問題,但是當他自己把問題說完,或說到一半的時候就想出答案走了,留下一臉茫然的你。
其實上面兩種場景現象就是所謂的小黃鴨調試法(Rubber Duck Debuging),又稱橡皮鴨調試法,它是我們軟件工程中最常使用調試方法之一。
此概念據說來自《程序員修煉之道》書中的一個故事,傳說程序大師隨身攜帶一只小黃鴨,在調試代碼的時候會在桌上放上這只小黃鴨,然后詳細地向鴨子解釋每行代碼,然后很快就將問題定位修復了。
意思就是遇到問題的時候,自己給自己解釋每行代碼的意思,幫自己理清思路。
總結
以上是生活随笔為你收集整理的SpringMVC--RequestMapping说明RestFul 风格小黄鸭调试法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: brooks levitate_体验:B
- 下一篇: deepin安装node