聊聊@RequestMapping和@GetMapping @PostMapping的區別
@RequestMapping和@GetMapping @PostMapping的區別
最近學習看一些代碼,發現對於發送請求這件事,有的地方用@RequestMapping,有的地方用@PostMapping,為瞭搞清楚區別,特意查瞭下spring 源代碼,現在特此記錄下。
@GetMapping
用於將HTTP get請求映射到特定處理程序的方法註解- 具體來說,@GetMapping是一個組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫。
@PostMapping
用於將HTTP post請求映射到特定處理程序的方法註解- 具體來說,@PostMapping是一個組合註解,是@RequestMapping(method = RequestMethod.POST)的縮寫。
下面我們來看下@GetMapping的源碼
可以對上面的兩句釋義給予充分的支撐。
/** * Annotation for mapping HTTP {@code GET} requests onto specific handler * methods. * * <p>Specifically, {@code @GetMapping} is a <em>composed annotation</em> that * acts as a shortcut for {@code @RequestMapping(method = RequestMethod.GET)}. * * * @author Sam Brannen * @since 4.3 * @see PostMapping * @see PutMapping * @see DeleteMapping * @see PatchMapping * @see RequestMapping */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = RequestMethod.GET) public @interface GetMapping { /** * Alias for {@link RequestMapping#name}. */ @AliasFor(annotation = RequestMapping.class) String name() default ""; ... }
上面代碼中,最關鍵的是
@RequestMapping(method = RequestMethod.GET)
這行代碼即說明@GetMapping就是@RequestMapping附加瞭請求方法。
同時,可以看到@GetMapping這個註解 是spring4.3版本引入,同時引入的還有@PostMapping、@PutMapping、@DeleteMapping和@PatchMapping,一共5個註解。
所以,一般情況下用
@RequestMapping(method = RequestMethod. XXXX)
即可。
SpringBoot 中常用註解@PathVaribale/@RequestParam/@GetMapping介紹
介紹幾種如何處理url中的參數的註解@PathVaribale/@RequestParam/@GetMapping。
其中,各註解的作用為:
@PathVaribale 獲取url中的數據
@RequestParam 獲取請求參數的值
@GetMapping 組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫
看一個例子,如果我們需要獲取Url=localhost:80/consumer/get/{id}中的返回的dept值,實現代碼如下:
以上,通過@PathVariable註解來獲取URL中的時參數的前提條件是我們知道url的格式時怎麼樣的。
隻有知道url的格式,我們才能在指定的方法上通過相同的格式獲取相應位置的參數值。
一般情況下,url的格式為:localhost:80/consumer/get/{id},這種情況下該如何來獲取其中的返回的dept值呢,
關於@RequestParam來完成獲取返回值代碼如下
當輸入:http://localhost/consumer/dept/get/1?id=1
看到返回瞭dept的結果:
但是當輸入:http://localhost/consumer/dept/get/1 (即不輸入id參數和參數值)
但是當輸入:http://localhost/consumer/dept/get/1?id (不輸入id參數值)
會報如下錯誤:
@RequestParam註解給我們提供瞭這種解決方案,即允許用戶不輸入id時,使用默認值,具體代碼如下:
此時輸入:http://localhost/consumer/dept/get/1?id 就不在報錯(使用瞭默認值)
輸入:http://localhost/consumer/dept/get/1
@GetMapping 組合註解
@GetMapping是一個組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫。該註解將HTTP Get 映射到 特定的處理方法上。
即可以使用@GetMapping(value = “/dept/get/{id}”)來代替
@RequestMapping(value=”/dept/get/{id}”,method= RequestMethod.GET)
即可以讓我們精簡代碼。
輸入:http://localhost/consumer/dept/get/1?id
輸入:http://localhost/consumer/dept/get/1
小結
本篇文章介紹瞭幾種常用獲取url中的參數哈,比較簡單。以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springboot RESTful以及參數註解的使用方式
- Spring Boot Rest常用框架註解詳情簡介
- SpringMVC @RequestMapping註解詳解
- Java進階之走進RESTful接口
- 如何讓Spring Rest 接口中路徑參數可選