为什么不写 @RequestParam 也能拿到参数?

在spring mvc 的使用过程中 获取 页面传来的参数的时候,我平时都习惯 @RequestParam String name,突然有一天我发现 直接在方法参数后面写 String name , User user 也能接收到页面的值,请问写与不写区别在哪里?

三种写法,test(String name),
test(@RequestParam String name),
test(@RequestParam("userName") String name),
第一种如果没有name 参数不会报错,
第二种没有name 参数会报错,(也可以设置required = false),
第三种跟第二种的区别是name 参数换为userName。

如果不写的话就默认是url?name=xxx这种的,如果方法参数名("name")和request.getParatmeter("name")相同的话,会自动set的。

不写@RequestParam之所以能拿到参数是因为Spring自动将HTTP表单与后端接口参数做了映射(名称一样就能映射成功),如果不是前端调用而是后端RPC调用(比如FeignClient)则会因为找不到参数而报错。