SpringBoot Web项目的参数绑定:URL传参及默认参数设置
来源:互联网 发布:外网映射端口怎么填写 编辑:程序博客网 时间:2024/06/11 14:10
一、@RequestParam
这个注解用来绑定单个请求数据,既可以是url中的参数,也可以是表单提交的参数和上传的文件
它有三个属性,value用于设置参数名,defaultValue用于对参数设置默认值,required为true时,如果参数为空,会报错
好,下面展示具体例子:
首先是vm:
<
h1
>param1:${param1}</
h1
>
<
h1
>param2:${param2}</
h1
>
好吧,就为了展示两个参数
第一种情况:
@RequestMapping
(value =
"/hello1.htm"
)
public
String hello1(ModelMap modelMap,Integer param1,
int
param2) {
modelMap.addAttribute(
"param1"
, param1);
modelMap.addAttribute(
"param2"
, param2);
return
"hello"
;
}
这里前面的参数时包装型,后面的参数时原始类型
直接用url请求:
http://localhost:8080/hello1.htm?param1=1¶m2=2
结果:
但是:
如果不传param2:
http://localhost:8080/hello1.htm?param1=1
直接就报错了
因为无法将null转换为原始类型
所以:建议所有的参数都用包装类型,别用原始类型
第二种情况:
仍然是上面的那个controller,地址改为
http://localhost:8080/hello1.htm?param2=1¶m1=2
就是让param2=1,param1=2,想试验下,参数绑定是和顺序有关,还是只和参数名称有关,结果:
所以,springMvc参数绑定只和参数名字有关系
第三种情况:
如果页面上表单里的参数和代码里的参数名不一样怎么办,这时候就可以用注解了:
@RequestMapping
(value =
"/hello1.htm"
)
public
String hello1(ModelMap modelMap,
@RequestParam
(value =
"paramTest"
) Integer param1, Integer param2) {
modelMap.addAttribute(
"param1"
, param1);
modelMap.addAttribute(
"param2"
, param2);
return
"hello"
;
}
在param1前面加上了注解,这时候第一个参数只接受paramTest名字的参数,param1此时无效了。
如果此时我们这么请求:
http://localhost:8080/hello1.htm?param1=1¶m2=2
spring直接报错,必须要这么请求了:
http://localhost:8080/hello1.htm?paramTest=1¶m2=2
结果:
第四种情况:
有时候页面上的表单客户不填任何值,但是在控制器里希望它有默认值
可以这样:
@RequestMapping
(value =
"/hello1.htm"
)
public
String hello1(ModelMap modelMap,
@RequestParam
(defaultValue =
"5"
) Integer param1, Integer param2) {
modelMap.addAttribute(
"param1"
, param1);
modelMap.addAttribute(
"param2"
, param2);
return
"hello"
;
}
这里用了RequestParam的defaultValue属性,如果url参数中没传param1,也不会报错,使用默认值,比如我们这么请求:
http://localhost:8080/hello1.htm?param2=2
结果:
但是,如果url中对param1赋值了:
http://localhost:8080/hello1.htm?param1=3¶m2=2
结果:
也就是说,我们赋的值会修改默认值
第五种情况:
RequestParam还有个属性:required
意思是必须传值,否则报错,就是这么任性
@RequestMapping
(value =
"/hello1.htm"
)
public
String hello1(ModelMap modelMap,
@RequestParam
(required =
true
) Integer param1, Integer param2) {
modelMap.addAttribute(
"param1"
, param1);
modelMap.addAttribute(
"param2"
, param2);
return
"hello"
;
}
但是当required=true,和defaultValue= 同时出现时,required失效,可传可不传
简单类型参数绑定小结:
springMVC默认根据参数名字来绑定,而不是参数位置
使用包装类型,否则如果不传值,会报错
使用@RequestParam(value="")来改变参数名字
使用@RequestParam(defaultValue=""),不传参时,使用默认值
使用@RequestParam(required=true),强制必须传参数
二、@PathVariable
用这个注解可以将URL中的占位符参数绑定到控制器处理方法的入参中,可以这样用:
@RequestMapping
(
"/hello2.htm/{param1}/{param2}"
)
public
String hello2(ModelMap modelMap,
@PathVariable
Integer param1,
@PathVariable
Integer param2) {
System.out.println(
"进入了hello2控制器"
);
System.out.println(param1 +
","
+ param2);
modelMap.addAttribute(
"param1"
, param1);
modelMap.addAttribute(
"param2"
, param2);
return
"hello"
;
}
URL:
http://localhost:8080/hello2.htm/1/2
结果:
如果不加PathVariable注解,是无法绑定的
@RequestMapping
(
"/hello2.htm/{param1}/{param2}"
)
public
String hello2(ModelMap modelMap,Integer param1,
@PathVariable
Integer param2) {
System.out.println(
"进入了hello2控制器"
);
System.out.println(param1 +
","
+ param2);
modelMap.addAttribute(
"param1"
, param1);
modelMap.addAttribute(
"param2"
, param2);
return
"hello"
;
}
去掉了第一个参数的注解:
http://localhost:8080/hello2.htm/1/2
结果:
传了空值到页面,无法绑定
- SpringBoot Web项目的参数绑定:URL传参及默认参数设置
- 通过URL传绑定字段参数的几种方法
- Spring Boot Web项目之参数绑定
- springmvc的url传参及后台接受参数
- java 及 web中项目url处理
- springboot获取URL请求参数的几种方法
- 搭建SpringBoot的web-mvc项目
- docker运行基于springboot的web项目
- springboot 是如何识别web项目的
- 修改默认的undo_retention参数设置
- 修改默认的undo_retention参数设置
- 修改默认的undo_retention参数设置
- 修改默认的undo_retention参数设置
- 修改默认的undo_retention参数设置
- 修改默认的undo_retention参数设置
- SpringBoot创建Web项目
- 【参数】DB_nK_CACHE_SIZE参数设置与数据库默认块大小之间的限制
- AS3获取Web传递的URL参数
- script标签的crossorigin属性
- Sum
- linux i节点(inode)
- 神经网络基础
- IE下ajax请求的缓存问题
- SpringBoot Web项目的参数绑定:URL传参及默认参数设置
- SPFA--最短路径
- Java学习笔记整理04
- postgresql数据库varchar、char、text的比较
- 一些for循环案例
- C语言几种常用排序
- AI“入侵”华尔街 高端职位也不保
- 【bzoj3637】Query on a tree VI
- 项目进度汇报4