7.@RequestParam注解

大佬地址:请优先查看大佬文章,你会很有收获哦
https://blog.csdn.net/qfikh/article/details/88553603

7.@RequestParam注解

所谓校正请求参数名,是指若请求 URL 所携带的参数名称与处理方法中指定的参数名不相同时, 则需在处理方法参数前, 添加一个注解@RequestParam(“请求参数名”),
指定请求 URL 所携带参数的名称。该注解是对处理器方法参数进行修饰的。 value 属性指定请求参数的名称。

@RequestParam 是从 Request 里获取参数值,即这种风格的 URL:

http://localhost:8080/user?id=1

@RequestParam 注解还有比较常用两个属性:

required :
该参数是否为必传项。默认是true,表示请求中一定要传入对应的参数,否则会报404错误,如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,原因是required=false时,不传参会给参数赋值null,这样就会把null赋值给了int,因此会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。

defaultValue :
参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。注意默认值可以使用SpEL表达式,如"#{systemProperties['java.vm.version']}"

特别注意:

required = true并不杜绝传递空值,只是验证传递的参数中是否含有value属性中的参数名。所以检验参数的合法性一般还需要自行处理。

如果设置了defaultValue,required设置将会失效,所以如果设置了defaultValue,就没必要设置required了。

/*
请求地址:http://localhost:8080/show?userName=1
参数名为:userName,注解可以将userName值赋给name,若不使用@RequestParam指定接收的参数名,则变量name必须改成userName或地址中userName改成name才会请求到当前处理器方法中
required=false:指定了若请求中没有userName参数也不会报错,可以正常请求,但是name值是空的
defaultValue="zhangsan":指定了若请求中没有userName参数,则name值使用默认值"zhangsan"
*/
@RequestMapping("/show")
public ModelAndView testController(@RequestParam(value="userName", required=false, defaultValue="zhangsan") String name){
ModelAndView mv = new ModelAndView();
mv.setViewName("hello2");
mv.addObject("msg", "接收普通请求参数:" + name);
return mv;
}

从 URL 中可以看出,@RequestParam 注解用于 GET 请求上时,接收拼接在 URL 中的参数。
注解还可以用于 POST 请求:
1.接收前端表单提交的参数,假如前端通过表单提交 username 和 password 两个参数,那我们可以使用 @RequestParam 来接收,用法和上面一样。可以解析form-data表单数据。
如果Content-Type=mutipart/form-data,Body中加入参数和URL后面拼接参数一起做Post请求,都可以被加载到Param中,如果是同名的,只取用form-data中的

2.请求方式用Content-Type=application/x-www-form-urlencoded这种情况下也能使用,sevlet将Body中的key-value转成Param。
如果Content-Type=application/x-www-form-urlencoded 和 URL 中参数名相同,接收参数是String类型,则两个值会被拼接(优先接收URL中的参数),如果接收参数是其他类型取的是URL中?后的参数。

@PostMapping("/param")
public void testRequestParamPost(@RequestParam String id) {
System.out.println("输入ID:" + id);
}

如果在请求中传入多个同名参数,比如:url?userName=zhl&userName=holley时
其实此时传入的数据格式是:"zhl,holley",即多个数据之间使用逗号分隔开,在后台接口中可以使用数组或者list类型的变量来接收:
public String requestparam8(@RequestParam(value="userName") String [] userNames)
或者
public String requestparam8(@RequestParam(value="list") List<String> list)
posted @   Lz_蚂蚱  阅读(682)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起