@RequestParam,@PathParam,@PathVariable等注解的区别

@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充

@RequestParam

看下面一段代码:

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

根据上面的这个URL,你可以用这样的方式来进行获取

1

2

3

4

5

public String getDetails(

 @RequestParam(value="param1", required=true) String param1,

  @RequestParam(value="param2", required=false) String param2){

...

}

@RequestParam 支持下面四种参数

defaultValue 如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值

name 绑定本次参数的名称,要跟URL上面的一样

required 这个参数是不是必须的

value 跟name一样的作用,是name属性的一个别名

@PathVariable

这个注解能够识别URL里面的一个模板,我们看下面的一个URL

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

上面的一个url你可以这样写:

1

2

3

4

5

6

@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){

.......

}

区别很明显了

@PathParam

这个注解是和spring的pathVariable是一样的,也是基于模板的,但是这个是jboss包下面的一个实现,上面的是spring的一个实现,都要导包

@QueryParam

@QueryParam 是 JAX-RS 本来就提供的,和Spring的RequestParam作用一致

@ResponseBody

responseBody表示服务器返回的时候以一种什么样的方式进行返回, 将内容或对象作为 HTTP 响应正文返回,值有很多,一般设定为json

@RequestBody

一般是post请求的时候才会使用这个请求,把参数丢在requestbody里面

补充:@pathvariable参数_SpringMVC 五种注解参数绑定

@pathvariable参数_SpringMVC 五种注解参数绑定

SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了

下面通过5个常用的注解演示下如何进行参数绑定:

1. @PathVariable注解

@PathVariable 是用来获得请求url中的动态参数的,可以将URL中的变量映射到功能处理方法的参数上,其中URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。

示例代码:

1

2

3

4

5

6

@ResponseBody

 @RequestMapping("/testUrlPathParam/{param1}/{param2}")public void testUrlPathParam(HttpServletRequest request, @PathVariable String param1,

         @PathVariable String param2) {

  System.out.println("通过PathVariable获取的参数param1=" + param1);

  System.out.println("通过PathVariable获取的参数param2=" + param2);

 }

输出结果:

通过PathVariable获取的参数param1=1

通过PathVariable获取的参数param2=2

2.@RequestHeader注解

@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。

示例代码:

1

2

3

4

@ResponseBody

 @RequestMapping("/testHeaderParam")public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) {

  System.out.println("通过RequestHeader获取的参数param1=" + param1);

 }

输出结果:

通过RequestHeader获取的参数param1=abc

3.@CookieValue注解

@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上。

示例代码:

1

2

3

4

5

@ResponseBody

 @RequestMapping("/testCookieParam")public void testCookieParam(HttpServletRequest request, HttpServletResponse response,

         @CookieValue String sessionid) {

  System.out.println("通过CookieValue获取的参数sessionid=" + sessionid);

 }

输出结果:

通过CookieValue获取的参数sessionid=ebef978eef6c46f8a95cc0990d2d360a

4.@RequestParam注解

@RequestParam注解用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。提交方式为get或post。(Http协议中,form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded);

@RequestParam注解实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段,

get方式中queryString的值,和post方式中body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到;

该注解有三个属性:value、required、defaultValue;value用来指定要传入值的id名称,required用来指示参数是否必录,defaultValue表示参数不传时候的默认值。

示例代码:

1

2

3

4

5

@ResponseBody

 @RequestMapping("/testRequestParam")public void testRequestParam(HttpServletRequest request,

         @RequestParam(value = "num", required = true, defaultValue = "0") int num) {

  System.out.println("通过RequestParam获取的参数num=" + num);

 }

输出结果:

通过RequestParam获取的参数num=10

5.@RequestBody注解

@RequestBody注解用来处理HttpEntity(请求体)传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据;

GET请求中,因为没有HttpEntity,所以@RequestBody并不适用;

POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

示例代码:

1

2

3

@ResponseBody

 @RequestMapping("/testRequestBody")public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){

  System.out.println("通过RequestBody获取的参数bodyStr=" + bodyStr); }

代码运行结果:

通过RequestBody获取的参数bodyStr=这是body的内容

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文章:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值