聊聊@RequestMapping和@GetMapping @PostMapping的區(qū)別
@RequestMapping和@GetMapping @PostMapping的區(qū)別
最近學(xué)習(xí)看一些代碼,發(fā)現(xiàn)對于發(fā)送請求這件事,有的地方用@RequestMapping,有的地方用@PostMapping,為了搞清楚區(qū)別,特意查了下spring 源代碼,現(xiàn)在特此記錄下。
@GetMapping用于將HTTP get請求映射到特定處理程序的方法注解- 具體來說,@GetMapping是一個(gè)組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫。
@PostMapping用于將HTTP post請求映射到特定處理程序的方法注解- 具體來說,@PostMapping是一個(gè)組合注解,是@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 "";
...
}
上面代碼中,最關(guān)鍵的是
@RequestMapping(method = RequestMethod.GET)
這行代碼即說明@GetMapping就是@RequestMapping附加了請求方法。
同時(shí),可以看到@GetMapping這個(gè)注解 是spring4.3版本引入,同時(shí)引入的還有@PostMapping、@PutMapping、@DeleteMapping和@PatchMapping,一共5個(gè)注解。
所以,一般情況下用
@RequestMapping(method = RequestMethod. XXXX)
即可。
SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介紹
介紹幾種如何處理url中的參數(shù)的注解@PathVaribale/@RequestParam/@GetMapping。
其中,各注解的作用為:
@PathVaribale 獲取url中的數(shù)據(jù)
@RequestParam 獲取請求參數(shù)的值
@GetMapping 組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫
看一個(gè)例子,如果我們需要獲取Url=localhost:80/consumer/get/{id}中的返回的dept值,實(shí)現(xiàn)代碼如下:

以上,通過@PathVariable注解來獲取URL中的時(shí)參數(shù)的前提條件是我們知道url的格式時(shí)怎么樣的。
只有知道url的格式,我們才能在指定的方法上通過相同的格式獲取相應(yīng)位置的參數(shù)值。
一般情況下,url的格式為:localhost:80/consumer/get/{id},這種情況下該如何來獲取其中的返回的dept值呢,
關(guān)于@RequestParam來完成獲取返回值代碼如下

當(dāng)輸入:http://localhost/consumer/dept/get/1?id=1
看到返回了dept的結(jié)果:

但是當(dāng)輸入:http://localhost/consumer/dept/get/1 (即不輸入id參數(shù)和參數(shù)值)
但是當(dāng)輸入:http://localhost/consumer/dept/get/1?id (不輸入id參數(shù)值)
會(huì)報(bào)如下錯(cuò)誤:

@RequestParam注解給我們提供了這種解決方案,即允許用戶不輸入id時(shí),使用默認(rèn)值,具體代碼如下:

此時(shí)輸入:http://localhost/consumer/dept/get/1?id 就不在報(bào)錯(cuò)(使用了默認(rèn)值)

輸入:http://localhost/consumer/dept/get/1

@GetMapping 組合注解
@GetMapping是一個(gè)組合注解,是@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

小結(jié)
本篇文章介紹了幾種常用獲取url中的參數(shù)哈,比較簡單。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)
- Spring中@RequestMapping、@PostMapping、@GetMapping的實(shí)現(xiàn)
- Spring MVC @GetMapping和@PostMapping注解的使用方式
- 詳解SpringBoot中@PostMapping注解的用法
- Java @PostMapping和@GetMapping方法使用詳解
- SpringBoot @PostMapping接收HTTP請求的流數(shù)據(jù)問題
- 如何解決@PutMapping或@PostMapping接收String類型參數(shù)多兩個(gè)“引號問題
相關(guān)文章
詳解springboot接口如何優(yōu)雅的接收時(shí)間類型參數(shù)
這篇文章主要為大家詳細(xì)介紹了springboot的接口如何優(yōu)雅的接收時(shí)間類型參數(shù),文中為大家整理了三種常見的方法,希望對大家有一定的幫助2023-09-09
解決@ServerEndpoint不能注入@Autowired的問題
這篇文章主要介紹了解決@ServerEndpoint不能注入@Autowired的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:快速計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)(Fast Bit Counting)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:快速計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)(Fast Bit Counting),本文直接給出實(shí)現(xiàn)代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-06-06
java 地心坐標(biāo)系(ECEF)和WGS-84坐標(biāo)系(WGS84)互轉(zhuǎn)的實(shí)現(xiàn)
這篇文章主要介紹了java 地心坐標(biāo)系(ECEF)和WGS-84坐標(biāo)系(WGS84)互轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
java實(shí)現(xiàn)的小時(shí)鐘示例分享
這篇文章主要介紹了java實(shí)現(xiàn)的小時(shí)鐘示例,需要的朋友可以參考下2014-02-02

