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

 更新时间:2021年02月23日 10:50:52   作者:一年e度的夏天  
这篇文章主要介绍了聊聊@RequestParam,@PathParam,@PathVariable等注解的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

@RequestParam

看下面一段代码:

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

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

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你可以这样写:

@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“) 绑定到操作方法的入参中。

示例代码:

@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部分的值绑定到方法的参数上。

示例代码:

@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的值绑定到方法的参数上。

示例代码:

@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表示参数不传时候的默认值。

示例代码:

@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上。

示例代码:

@ResponseBody
 @RequestMapping("/testRequestBody")public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){
  System.out.println("通过RequestBody获取的参数bodyStr=" + bodyStr); }

代码运行结果:

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

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

相关文章

  • Java 中很好用的数据结构EnumSet

    Java 中很好用的数据结构EnumSet

    这篇文章主要介绍了Java 中很好用的数据结构EnumSet,EnumMap即属于一个Map,下文围绕主题展开详细内容,需要的小伙伴可以参考参考一下
    2022-05-05
  • java实现连连看游戏课程设计

    java实现连连看游戏课程设计

    这篇文章主要为大家详细介绍了java实现连连看游戏课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • SpringBoot中的RabbitMQ用法详解

    SpringBoot中的RabbitMQ用法详解

    RabbitMQ是一个开源的消息队列系统,它通过AMQP(高级消息队列协议)来实现消息的传递,SpringBoot是目前非常流行的Java开发框架,它提供了很多便利性的功能,其中就包括对RabbitMQ的支持,在本文中,我们将介绍如何在SpringBoot中使用RabbitMQ
    2023-07-07
  • Java从数据库中读取Blob对象图片并显示的方法

    Java从数据库中读取Blob对象图片并显示的方法

    这篇文章主要介绍了Java从数据库中读取Blob对象图片并显示的方法,实例分析了Java读取数据库中Blob对象图片的技巧与操作方法,需要的朋友可以参考下
    2015-02-02
  • SpringCloud 集成Sentinel的实战教程

    SpringCloud 集成Sentinel的实战教程

    这篇文章主要介绍了SpringCloud 集成Sentinel的详细过程,本文通过实例代码图文相结合给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-08-08
  • 如何获取Maven项目的版本号

    如何获取Maven项目的版本号

    最近需要在项目中获取项目的版本号,最笨的方法莫过于硬编码一个版本号,当然之前我也是这么干的。不过闲下来的时候突发奇想Spring Boot项目中pom.xml定义的版本号(也就是project.version的值)能不能通过API获得呢?于是利用摸鱼的时间研究了这种无聊透顶的东西。
    2021-05-05
  • spring-boot.version2.6升级到2.7.18后security报错问题

    spring-boot.version2.6升级到2.7.18后security报错问题

    这篇文章主要介绍了spring-boot.version2.6升级到2.7.18后security报错问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java使用数组实现ArrayList的动态扩容的方法

    Java使用数组实现ArrayList的动态扩容的方法

    这篇文章主要介绍了Java使用数组实现ArrayList的动态扩容的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 浅谈java多态的实现主要体现在哪些方面

    浅谈java多态的实现主要体现在哪些方面

    下面小编就为大家带来一篇浅谈java多态的实现主要体现在哪些方面。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Java利用Netty时间轮实现延时任务

    Java利用Netty时间轮实现延时任务

    时间轮是一种可以执行定时任务的数据结构和算法。本文将为大家详细讲解一下Java如何利用Netty时间轮算法实现延时任务,感兴趣的小伙伴可以了解一下
    2022-08-08

最新评论