获取QueryString格式参数(@RequestParam)
QueryString(查询字符串)是指URL中?
符号后面的参数部分。它通常用于在HTTP请求中传递参数给服务器。
比如:http://localhost:8080/test?q=apple&category=fruit
其中,?
之后的部分就是查询字符串,包括q=apple
和category=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 相关注解其他属性
代表是否必须,默认值为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";
}
假如没有传对应的参数,可以用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博客