@RequestParam详解——获取QueryString格式参数

发布时间:2023年12月31日

获取QueryString格式参数(@RequestParam)

? QueryString(查询字符串)是指URL中?符号后面的参数部分。它通常用于在HTTP请求中传递参数给服务器。

比如:http://localhost:8080/test?q=apple&category=fruit

? 其中,?之后的部分就是查询字符串,包括q=applecategory=fruits两个参数。

? 我们可以使用@RequestParam来获取QueryString格式的参数。

1.参数单独的获取

? @RequestParam把QueryString格式参数的参数绑定在方法的参数上,则想获取的参数单独的获取即把参数放在方法上即可。

? 在方法中定义方法参数,方法参数名要和请求参数名一致,这种情况下可以省略@RequestParam注解。

@GetMapping("/test")
 ? ?public String testRquestParam(Integer id, String name, String[] likes){
 ? ? ? ?System.out.println(id);
 ? ? ? ?System.out.println(name);
 ? ? ? ?System.out.println(Arrays.toString(likes));
 ? ? ? ?return "success";
 ?  }
?

如果方法参数名和请求参数名不一致,我们可以加上@RequestParam注解例如:

 ? ?@GetMapping("/test")
 ? ?public String testRquestParam(@RequestParam("id") Integer uid,@RequestParam("name") String name, @RequestParam("likes")String[] likes){
 ? ? ? ?System.out.println(uid);
 ? ? ? ?System.out.println(name);
 ? ? ? ?System.out.println(Arrays.toString(likes));
 ? ? ? ?return "success";
 ?  }

2.获取参数封装成实体对象

如果我们想把这些参数封装到一个User对象中可以使用如下写法:

 ?@GetMapping("/test")
 ? ?public String testRquestParam(User user){
 ? ? ? ?System.out.println(user);
 ? ? ? ?return "success";
 ?  }

User类定义如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
 ? ?private Integer id;
 ? ?private String name;
 ? ?private String[] likes;
}

测试时请求url如下:

http://localhost:8080/test?id=1&name=z&likes=唱&likes=跳

注意:实体类中的成员变量要和请求参数名对应上。并且要提供对应的set/get方法。

2.1 相关注解其他属性

2.1.1?required

? ?代表是否必须默认值为true也就是必须要有对应的参数。如果没有就会报错。

? ?如果对应的参数可传可不传则可以把其设置为fasle

例如:

? ?@GetMapping("/test")
 ? ?public String test(@RequestParam(value = "id",required = false) Integer uid,@RequestParam("name") String name, @RequestParam("likes")String[] likes){
 ? ? ? ?System.out.println(uid);
 ? ? ? ?System.out.println(name);
 ? ? ? ?System.out.println(Arrays.toString(likes));
 ? ? ? ?return "success";
 ?  }

4.3.4.2 defaultValue

假如没有传对应的参数,可以用defaultValue属性设置默认值

例如:

 ? ?@GetMapping("/test")
 ? ?public String test(@RequestParam(value = "id",required = false,defaultValue = "666") Integer uid,@RequestParam("name") String name, @RequestParam("likes")String[] likes){
 ? ? ? ?System.out.println(uid);
 ? ? ? ?System.out.println(name);
 ? ? ? ?System.out.println(Arrays.toString(likes));
 ? ? ? ?return "success";
 ?  }

@RequestBody与@RequestParam()可以同时使用

? 一个请求,只有一个@RequestBody,但是可以有多个@RequestParam。

?可以使用@RequestBody获取请求体中的json数据,然后使用@RequestParam获取url中的参数

@PostMapping("/test")
public String example(@RequestParam("id") Long id, @RequestBody User user) {
 ? ?// 处理逻辑
 ? ?return ?id + user.toString();
}

用@RequestParam接收的参数:

url: localhost:8080/example?id=123

用@RequestBody接收前端传的的json参数

Content-Type: application/json
?
{
 ? ?"name": "z",
 ? ?"age": 3
}

? 注意:参数加了@RequestParam()的话,那么前端必须传对应参数值(不过可以设置required属性来调节是否必须传),否者会报错;如果参数前没有加@RequestParam()注解,那么前端可以传,也可以不传。

?——————————————————————————————————————————

其他Controller类常用的注解可以这个文章的汇总:Web开发Controller类详解-CSDN博客

文章来源:https://blog.csdn.net/weixin_72926030/article/details/133841324
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。