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

获取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博客

你可能感兴趣的:(SpringBoot,spring,boot,后端,java,springboot,spring,mvc,json)