一、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非必填。
最新评论