溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

@RequestParam、@PathParam、@PathVariable三者有什么區(qū)別

發(fā)布時(shí)間:2021-02-23 16:33:04 來(lái)源:億速云 閱讀:1326 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了@RequestParam、@PathParam、@PathVariable三者有什么區(qū)別,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

@RequestParam 和 @PathVariable 注解是用于從request中接收請(qǐng)求的,兩個(gè)都可以接收參數(shù),關(guān)鍵點(diǎn)不同的是@RequestParam 是從request里面拿取值,而 @PathVariable 是從一個(gè)URI模板里面來(lái)填充

@RequestParam

看下面一段代碼:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

根據(jù)上面的這個(gè)URL,你可以用這樣的方式來(lái)進(jìn)行獲取

public String getDetails(
 @RequestParam(value="param1", required=true) String param1,
  @RequestParam(value="param2", required=false) String param2){
...
}

@RequestParam 支持下面四種參數(shù)

defaultValue 如果本次請(qǐng)求沒(méi)有攜帶這個(gè)參數(shù),或者參數(shù)為空,那么就會(huì)啟用默認(rèn)值

name 綁定本次參數(shù)的名稱,要跟URL上面的一樣

required 這個(gè)參數(shù)是不是必須的

value 跟name一樣的作用,是name屬性的一個(gè)別名

@PathVariable

這個(gè)注解能夠識(shí)別URL里面的一個(gè)模板,我們看下面的一個(gè)URL

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

上面的一個(gè)url你可以這樣寫:

@RequestMapping("/hello/{id}")
 public String getDetails(@PathVariable(value="id") String id,
 @RequestParam(value="param1", required=true) String param1,
 @RequestParam(value="param2", required=false) String param2){
.......
}

區(qū)別很明顯了

@PathParam

這個(gè)注解是和spring的pathVariable是一樣的,也是基于模板的,但是這個(gè)是jboss包下面的一個(gè)實(shí)現(xiàn),上面的是spring的一個(gè)實(shí)現(xiàn),都要導(dǎo)包

@QueryParam

@QueryParam 是 JAX-RS 本來(lái)就提供的,和Spring的RequestParam作用一致

@ResponseBody

responseBody表示服務(wù)器返回的時(shí)候以一種什么樣的方式進(jìn)行返回, 將內(nèi)容或?qū)ο笞鳛?HTTP 響應(yīng)正文返回,值有很多,一般設(shè)定為json

@RequestBody

一般是post請(qǐng)求的時(shí)候才會(huì)使用這個(gè)請(qǐng)求,把參數(shù)丟在requestbody里面

補(bǔ)充:@pathvariable參數(shù)_SpringMVC 五種注解參數(shù)綁定

@pathvariable參數(shù)_SpringMVC 五種注解參數(shù)綁定

SpringMVC參數(shù)綁定,簡(jiǎn)單來(lái)說(shuō)就是將客戶端請(qǐng)求的key/value數(shù)據(jù)綁定到controller方法的形參上,然后就可以在controller中使用該參數(shù)了

下面通過(guò)5個(gè)常用的注解演示下如何進(jìn)行參數(shù)綁定:

1. @PathVariable注解

@PathVariable 是用來(lái)獲得請(qǐng)求url中的動(dòng)態(tài)參數(shù)的,可以將URL中的變量映射到功能處理方法的參數(shù)上,其中URL 中的 {xxx} 占位符可以通過(guò)@PathVariable(“xxx“) 綁定到操作方法的入?yún)⒅小?/p>

示例代碼:

@ResponseBody
 @RequestMapping("/testUrlPathParam/{param1}/{param2}")public void testUrlPathParam(HttpServletRequest request, @PathVariable String param1,
         @PathVariable String param2) {
  System.out.println("通過(guò)PathVariable獲取的參數(shù)param1=" + param1);
  System.out.println("通過(guò)PathVariable獲取的參數(shù)param2=" + param2);
 }

輸出結(jié)果:

通過(guò)PathVariable獲取的參數(shù)param1=1

通過(guò)PathVariable獲取的參數(shù)param2=2

2.@RequestHeader注解

@RequestHeader 注解,可以把Request請(qǐng)求header部分的值綁定到方法的參數(shù)上。

示例代碼:

@ResponseBody
 @RequestMapping("/testHeaderParam")public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) {
  System.out.println("通過(guò)RequestHeader獲取的參數(shù)param1=" + param1);
 }

輸出結(jié)果:

通過(guò)RequestHeader獲取的參數(shù)param1=abc

3.@CookieValue注解

@CookieValue 可以把Request header中關(guān)于cookie的值綁定到方法的參數(shù)上。

示例代碼:

@ResponseBody
 @RequestMapping("/testCookieParam")public void testCookieParam(HttpServletRequest request, HttpServletResponse response,
         @CookieValue String sessionid) {
  System.out.println("通過(guò)CookieValue獲取的參數(shù)sessionid=" + sessionid);
 }

@RequestParam、@PathParam、@PathVariable三者有什么區(qū)別

輸出結(jié)果:

通過(guò)CookieValue獲取的參數(shù)sessionid=ebef978eef6c46f8a95cc0990d2d360a

4.@RequestParam注解

@RequestParam注解用來(lái)處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容。提交方式為get或post。(Http協(xié)議中,form的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認(rèn)為application/x-www-form-urlencoded);

@RequestParam注解實(shí)質(zhì)是將Request.getParameter() 中的Key-Value參數(shù)Map利用Spring的轉(zhuǎn)化機(jī)制ConversionService配置,轉(zhuǎn)化成參數(shù)接收對(duì)象或字段,

get方式中queryString的值,和post方式中body data的值都會(huì)被Servlet接受到并轉(zhuǎn)化到Request.getParameter()參數(shù)集中,所以@RequestParam可以獲取的到;

該注解有三個(gè)屬性:value、required、defaultValue;value用來(lái)指定要傳入值的id名稱,required用來(lái)指示參數(shù)是否必錄,defaultValue表示參數(shù)不傳時(shí)候的默認(rèn)值。

示例代碼:

@ResponseBody
 @RequestMapping("/testRequestParam")public void testRequestParam(HttpServletRequest request,
         @RequestParam(value = "num", required = true, defaultValue = "0") int num) {
  System.out.println("通過(guò)RequestParam獲取的參數(shù)num=" + num);
 }

輸出結(jié)果:

通過(guò)RequestParam獲取的參數(shù)num=10

5.@RequestBody注解

@RequestBody注解用來(lái)處理HttpEntity(請(qǐng)求體)傳遞過(guò)來(lái)的數(shù)據(jù),一般用來(lái)處理非Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù);

GET請(qǐng)求中,因?yàn)闆](méi)有HttpEntity,所以@RequestBody并不適用;

POST請(qǐng)求中,通過(guò)HttpEntity傳遞的參數(shù),必須要在請(qǐng)求頭中聲明數(shù)據(jù)的類型Content-Type,SpringMVC通過(guò)使用HandlerAdapter配置的HttpMessageConverters來(lái)解析HttpEntity中的數(shù)據(jù),然后綁定到相應(yīng)的bean上。

示例代碼:

@ResponseBody
 @RequestMapping("/testRequestBody")public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){
  System.out.println("通過(guò)RequestBody獲取的參數(shù)bodyStr=" + bodyStr); }

代碼運(yùn)行結(jié)果:

通過(guò)RequestBody獲取的參數(shù)bodyStr=這是body的內(nèi)容

上述內(nèi)容就是@RequestParam、@PathParam、@PathVariable三者有什么區(qū)別,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI