详解Spring Boot Web项目之参数绑定

2025-05-29 0 68

一、@requestparam

这个注解用来绑定单个请求数据,既可以是url中的参数,也可以是表单提交的参数和上传的文件

它有三个属性,value用于设置参数名,defaultvalue用于对参数设置默认值,required为true时,如果参数为空,会报错

好,下面展示具体例子:

首先是vm:

?

1

2
<h1>param1:${param1}</h1>

<h1>param2:${param2}</h1>

好吧,就为了展示两个参数

第一种情况:

?

1

2

3

4

5

6
@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

结果:

详解Spring Boot Web项目之参数绑定

但是:

如果不传param2:  

http://localhost:8080/hello1.htm?param1=1

直接就报错了

因为无法将null转换为原始类型

所以:建议所有的参数都用包装类型,别用原始类型

第二种情况:

仍然是上面的那个controller,地址改为

http://localhost:8080/hello1.htm?param2=1¶m1=2

就是让param2=1,param1=2,想试验下,参数绑定是和顺序有关,还是只和参数名称有关,结果:

所以,springmvc参数绑定只和参数名字有关系

详解Spring Boot Web项目之参数绑定

第三种情况:

如果页面上表单里的参数和代码里的参数名不一样怎么办,这时候就可以用注解了:

?

1

2

3

4

5

6
@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

结果:

详解Spring Boot Web项目之参数绑定

第四种情况:

有时候页面上的表单客户不填任何值,但是在控制器里希望它有默认值

可以这样:

?

1

2

3

4

5

6
@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

结果:

详解Spring Boot Web项目之参数绑定

但是,如果url中对param1赋值了:

http://localhost:8080/hello1.htm?param1=3¶m2=2

结果:

详解Spring Boot Web项目之参数绑定

也就是说,我们赋的值会修改默认值

第五种情况:

requestparam还有个属性:required

意思是必须传值,否则报错,就是这么任性

?

1

2

3

4

5

6
@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中的占位符参数绑定到控制器处理方法的入参中,可以这样用:

?

1

2

3

4

5

6

7

8
@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

结果:

详解Spring Boot Web项目之参数绑定

如果不加pathvariable注解,是无法绑定的

?

1

2

3

4

5

6

7

8
@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

结果:

详解Spring Boot Web项目之参数绑定

传了空值到页面,无法绑定

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/nicekk/p/6072130.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 详解Spring Boot Web项目之参数绑定 https://www.kuaiidc.com/118181.html

相关文章

发表评论
暂无评论