首页 > 其他分享 >常用注解之@PathVariable与@RequestParam详解

常用注解之@PathVariable与@RequestParam详解

时间:2023-08-08 19:23:18浏览次数:39  
标签:PathVariable RequestParam URL 详解 参数 id String

@PathVariable和@RequestParam

首先说一下Request了解一下请求参数是什么

在访问各种各样网站时,经常会发现网站的URL的最后一部分形如:?xxxx=yyyy&zzzz=wwww。这就是HTTP协议中的Request参数,它有什么用呢?先来看一个例子:

在知乎中搜索web
浏览器跳转到新页面后,URL变为https://www.zhihu.com/search?type=content&q=web
这里type=content&q=web就是搜索请求的参数,不同参数之间用&分隔,每个参数形如name=value形式,分别表示参数名字和参数值。在这个例子中,我们输入不同的搜索关键词,在搜索结果页面的URL的q参数是不同的,也就是说,HTTP参数实际上可以认为是一种用户的输入,根据不同的用户输入,服务器经过处理后返回不同的输出(例如搜索spring和搜索java,显示结果是不一样的。)

@RequestParam:

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

@RequestParam
看下面一段代码:

http://localhost:8080/springmvc/hello/101?param1=10¶m2=20

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

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

Param 支持下面四种参数

defaultValue 如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值
name 绑定本次参数的名称,要跟URL上面的一样
required 这个参数是不是必须的
value 跟name一样的作用,是name属性的一个别名

@PathVariable:

@PathVariable绑定URI模板变量值

@PathVariable是用来获得请求url中的动态参数的

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。//配置url和方法的一个关系@RequestMapping("item/{itemId}")

/* @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,类似于struts的action请求
* @responsebody表示该方法的返回结果直接写入HTTP response body中
*一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response *body中。
*比如异步获取json数据,加上@responsebody后,会直接返回json数据。*
*@Pathvariable注解绑定它传过来的值到方法的参数上
*用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数
*/

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

http://localhost:8080/springmvc/hello/101?param1=10¶m2=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){
.......
}

Spring MVC中的Request参数

在SpringMVC框架中,现在我们已经可以通过定义@RequestMapping来处理URL请求了,和@PathVariable一样,我们也需要再处理URL的函数中获取URL中的参数-也就是?key=value1&key2=value2这样的参数列表。通过注解@RequestParam可以轻松的将URL中的参数绑定到处理函数方法的变量中:

@RequestMapping("/user")
@ResponseBody
public String getUserBlog(@RequestParam("id") int blogId) {
return "blogId = " + blogId;
}

这样当我们访问/user/?id=123时,Spring MVC帮助我们将Request参数id的值绑定到了处理函数的参数blogId上。这样就能够轻松获取用户输入,并根据它的值进行计算并返回了。

运行结果:

相信大家可能注意到了,@RequestParam和@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分,简单的说就是url写法不同,如下:

使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值

使用@PathVariable时,URL是这样的:http://host:port/path/参数值

后台接收方式如下:

@RequestMapping(value="/user",method = RequestMethod.GET)
@ResponseBody
public User printUser(@RequestParam(value = "id", required = false, defaultValue = "0") int id) {
User user = new User();
user = userService.getUserById(id);
return user;
}

@GetMapping("/edit/{userId}")
public String edit(@PathVariable("userId") Long userId, Model model)
{
User user = userService.selectUserById(userId);
List<Role> roles = roleService.selectRolesByUserId(userId);
List<Post> posts = postService.selectPostsByUserId(userId);
model.addAttribute("roles", roles);
model.addAttribute("posts", posts);
model.addAttribute("user", user);
return prefix + "/edit";
}
一旦我们在方法中定义了@RequestParam变量,如果访问的URL中不带有相应的参数,就会抛出异常——这是显然的,Spring尝试帮我们进行绑定,然而没有成功。但有的时候,参数确实不一定永远都存在,这是我们可以通过定义required属性:

@RequestParam(name="id",required=false)
当然,在参数不存在的情况下,可能希望变量有一个默认值:

@RequestParam(name="id",required=false,defaultValue="0")

在springboot中这么用:

一个参数:

补充:

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

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

多个参数:
————————————————
版权声明:本文为CSDN博主「hanbingge123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hanbingge123/article/details/122304893

标签:PathVariable,RequestParam,URL,详解,参数,id,String
From: https://www.cnblogs.com/xiaoxihebei/p/17615181.html

相关文章

  • C语言学习笔记(八)指针详解
    指针详解arr[i]=*(arr+i)=*(p+i)=p[i]字符指针charp*intmain(){ charch='w'; char*pc=&ch; return0;}intmain(){ chararr[]="abcdefg"; char*pc=arr; printf("%s\n",arr); printf("%s\n",pc); ......
  • TCP/IP 详解
    第四章ARPARP为IP地址到对应的硬件地址之间提供动态映射RARP是被那些没有磁盘驱动器的系统使用(一般是无盘工作站或X终端),它需要系统管理员进行手工设置  ARP分组格式 ARP高速缓存ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Inter......
  • 造船(并查集)思路详解
    造船题目描述:题目描述小Y想要在虚拟世界里造船。最开始m个船的完成度全部都为0。小Y第i时刻可以在a_i和b_i两艘船中选择一艘让这艘船的完成度。由于国家政府是奇数控,所以所有偶数完成度的船只都将被摧毁,小Y想知道m时刻后能剩下来的船只最多有多少艘。输入格式第一行两个......
  • json web token(jwt)详解
    1.jsonwebtoken是什么?JSONWebToken(JWT)是一个开放标准(RFC7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 2.什么时候你应该用JSONWebTokens下列场景中使用JSONWebToken是......
  • 详解Jvm中时区设置方式,推荐 代码中TimeZone.getTimeZone("Asia/Shanghai") 而不使用Ti
    详解Jvm中时区设置方式原文链接:https://www.45fan.com/article.php?aid=20090934958860528675768691这篇文章memo一下Jvm中关于时区设定的基础操作。Java的时区设定这里列出如下三种方式方式说明TimeZone.setDefault方式通过java的utils下的TimeZone进行动态设定......
  • @Transactional(rollbackFor = Exception.class) 详解 推荐的事务注解方式 @Transact
    @Transactional(rollbackFor=Exception.class)详解原文链接:https://blog.csdn.net/weixin_43987718/article/details/12342262117、@Transactional(rollbackFor=Exception.class)详解1、参考来源:https://www.cnblogs.com/clwydjgs/p/9317849.html1)、异常是分为运行......
  • 一文详解TextBrewer
    本文分享自华为云社区《TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用》,作者:汀丶。TextBrewer是一个基于PyTorch的、为实现NLP中的知识蒸馏任务而设计的工具包,融合并改进了NLP和CV中的多种知识蒸馏技术,提供便......
  • Java Spring MVC 图片上传操作详解
    JavaSpringMVC图片上传操作详解在现代的Web开发中,图片上传是一个非常常见的需求。而JavaSpringMVC框架则是JavaWeb开发中常用的框架之一。本文将介绍如何在JavaSpringMVC框架中实现图片上传操作。JavaSpringMVC图片上传操作详解1.创建文件上传表单首先需要在前端页面......
  • JavaWebSocket心跳机制详解
    JavaWebSocket心跳机制详解WebSocket是一种在Web浏览器和服务器之间进行全双工通信的协议,它提供了一种简单而强大的方式来实现实时数据传输。在使用WebSocket时,心跳机制是非常关键的,它能够保持连接的稳定性并及时发现连接的异常。本文将详细解释JavaWebSocket心跳机制的实现原理......
  • 软件测试|MySQL WHERE条件查询详解:筛选出需要的数据
    简介在数据库中,我们常常需要从表中筛选出符合特定条件的数据,以便满足业务需求或获取有用的信息。MySQL提供了WHERE条件查询,使我们能够轻松地筛选数据。本文将详细介绍MySQLWHERE条件查询的用法和示例,帮助大家更好地理解和应用这一功能。WHERE条件查询的基本语法SELECT列1,列2,.......