以前一直以为接口接收参数必须用RequestParam这个注解才可以接收到
最近偶然的机会接口报错,检查错误的时候发现忘记写了,但还是可以正常接收到参数,
刚开始以为是因为从以前的@RequestMapping改用了@GetMapping/@PostMapping的原因,仔细想想,这个只是个简化的而已,然后…
不使用@RequestParam
测试
有null
传值,正常接收
使用@RequestParam
使用@RequestParam,没有意外,正常接收参数,我用的swagger测试接口,swagger就有个必填标志
swagger里面这个必传标志,是因为@RequestParam有一个属性,required,默认true,参数必传,也可以自己设置为false,再试试为false
也是正常请求,@RequestParam一共有4个属性:require,name,value,defaultValue
required:就是刚刚设置参数是否为必传,默认true
name:入参的key值(也可以叫变量名,如果接口变量名和入参不一致,可以手动设置这个属性为入参变量名,其它地方还是可以用自定义变量名)
value:也是设置key值参数名字,如果自定义参数名和入参参数名一致,可以不写
defaultValue:参数默认值(当变量设置了默认值,require属性指定为true会失效)
小结:
不使用RequestParam场景:
- 接收参数比较少,每一次变量名都和入参变量名一模一样,没有参数需要设置默认值,参数可传可不传的情况
使用RequestParam: - 参数可以为非必传,不传时候需要默认值(defaultValue)
出现入参参数名和自定义参数名不一致,但是接口完成了开发,不想过多改动的(使用name属性设置)
name测试:
- 设置name属性,指定变量名,
defaultVlue测试
- swagger会新增显示默认值
- 输入参数的输入框填充了默认值
- 测试输入为空,现实的默认值(请求了两次,所以输出了两次)
- 测试手动修改require属性为true,参数为空也会返回默认值