一、RequestParam简介

RequestParam是Spring框架中用来接收HTTP请求参数的注解。通过该注解,我们可以将传递过来的参数绑定到方法的入参中。

RequestParam注解有两种使用方式:必填和非必填。默认情况下,RequestParam是必填的,也就是说,如果客户端请求时没有传递相应的参数,那么服务端会返回400 Bad Request错误。

二、RequestParam非必填实现方法

既然RequestParam默认情况下是必填的,那么如何实现RequestParam非必填呢?我们可以通过设置defaultValue属性来实现。

1. 实现方式

首先看一下实现方式:

@GetMapping("/test")
public String test(@RequestParam(value="id", required=false, defaultValue="0") Integer id) {
    System.out.println("id:" + id);
    return "success";
}

在这个实现方式中,将defaultValue的值设定为”0″,这样当请求中没有传递id参数时,默认值就是0。如果传递了id参数,那么就会把传递的值绑定到方法入参的id参数中。

2. 示例代码

这里给出一个完整的示例代码:

@RestController
public class TestController {

    @GetMapping("/test")
    public String test(@RequestParam(value="id", required=false, defaultValue="0") Integer id) {
        System.out.println("id:" + id);
        return "success";
    }
}

在该示例中,我们定义了一个Restful接口test,接收id参数。如果请求时没有传递id参数,那么默认值是0。

我们可以用Postman工具进行测试,请求如下:

GET http://localhost:8080/test

结果如下:

id:0

接下来我们再请求且传递id参数,请求如下:

GET http://localhost:8080/test?id=123

结果如下:

id:123

三、RequestParam非必填的使用场景

RequestParam非必填的使用场景比较广泛,可以解决一些参数选填的情况。

1. 实际案例

比如我们的系统中有一个用户模块,用户注册时需要填写相关信息,包括姓名、手机号码等。但是,手机号码并不是必填项,如果用户不填写手机号码,我们也需要允许其注册成功。这个时候,我们可以使用RequestParam非必填来实现手机号码的选填。

2. 示例代码

下面给出一个完整的用户注册接口代码:

@RestController
public class UserController {

    @PostMapping("/user/register")
    public String register(@RequestParam(value="name") String name, @RequestParam(value="mobile", required=false) String mobile) {
        System.out.println("name:" + name + ", mobile:" + mobile);
        return "success";
    }
}

在这个用户注册接口中,我们需要绑定name和mobile参数。其中,name是必填项,mobile是非必填项。当mobile为null或空字符串时,我们不会报错,而是允许注册成功。

使用Postman工具进行测试,请求如下:

POST http://localhost:8080/user/register
Content-Type: application/json

{
    "name": "测试用户",
    "mobile": "13512345678"
}

结果如下:

name:测试用户, mobile:13512345678

接下来我们再请求但是不传mobile参数,请求如下:

POST http://localhost:8080/user/register
Content-Type: application/json

{
    "name": "测试用户"
}

结果如下:

name:测试用户, mobile:null

四、RequestParam非必填的注意事项

虽然RequestParam非必填可以解决一些参数选填的情况,但是在使用时还是要注意一些问题。

1. 参数名称必须和请求中的参数名称一致

如果方法入参中使用了@RequestParam注解,那么参数名称必须和请求中的参数名称一致。否则无法绑定参数值。

2. 非必填参数不要定义默认值

如果设置了@RequestParam的defaultValue属性,那么就不是非必填参数了,而是有默认值的必填参数。所以在定义非必填参数时,不需要设置defaultValue属性。

五、总结

RequestParam非必填是Spring MVC中很实用的注解之一,可以很好地解决参数选填的情况。我们可以通过设置defaultValue属性来实现RequestParam非必填。