SpringMVC五种类型参数传递
SpringMVC五种类型参数传递
CAMELLIA五种类型参数传递
前面已经讲解使用GET或POST来发送请求和数据,所携带的数据都是比较简单的数据,接下来在这个基础上,研究一些比较复杂的参数传递,常见的参数种类有:
- 普通参数
- POJO类型参数
- 嵌套POJO类型参数
- 数组类型参数
- 集合类型参数
1. 普通参数
- 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数。
* 如果形参与地址参数名不一致该如何解决?
发送请求与参数:
1 | http://localhost/commonParamDifferentName?name=张三&age=18 |
后台接收参数:
1 |
|
因为前端给的是name
,后台接收使用的是userName
,两个名称对不上,导致接收数据失败。
解决方案:使用@RequestParam注解
1 |
|
注意:写上@RequestParam
注解框架就不需要自己去解析注入,能提升框架处理性能。
2. POJO数据类型
简单数据类型一般处理的是参数个数比较少的请求,如果参数比较多,那么后台接收参数的时候就比较复杂,这个时候我们可以考虑使用POJO数据类型。
- POJO参数:请求参数名与形参对象字段名相同,定义POJO类型形参即可接收参数。
1 | //POJO参数:请求参数与形参对象中的属性对应即可完成参数传递 |
注意:
- 无论是GET还是POST请求,只要请求参数名称与POJO类属性名称对应,Spring MVC都会自动完成数据绑定。
- 请求参数key的名称要和POJO中属性的名称一致,否则无法封装。
3. 嵌套POJO类型参数
如果POJO对象中嵌套了其他的POJO类,如
1 | public class Address { |
嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
- 发送请求和参数:
http://locahost/pojoContainPojoParam?name=John&age=30&address.city=NewYork&address.street=5thAvenue
后台接收参数:
1 | //POJO参数:请求参数与形参对象中的属性对应即可完成参数传递 |
注意: 请求参数key的名称要和POJO中属性的名称一致,否则无法封装。
4. 数组类型参数
举个简单的例子,如果前端需要获取用户的爱好,爱好绝大多数情况下都是多个,如何发送请求数据和接收数据呢?
数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数。
- 发送请求和参数:
- 后台接收参数:
1 | //数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中 |
5. 集合类型参数
数组能接收多个值,那么集合是否也可以实现这个功能呢?
- 发送请求和参数:
- 后台接收参数:
1 | //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据 |
运行报错:
错误的原因是: SpringMVC将List看做是一个POJO对象来处理,将其创建一个对象并准备把前端的数据封装到对象中,但是List是一个接口无法创建对象,所以报错。
解决方案是:使用@RequestParam注解
1 | //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据 |
- 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系。
- 对于简单数据类型使用数组会比集合更简单些。
知识点1:@RequestParam
名称 | @RequestParam |
---|---|
类型 | 形参注解 |
位置 | SpringMVC控制器方法形参定义前面 |
作用 | 绑定请求参数与处理器方法形参间的关系 |
相关参数 | required:是否为必传参数 defaultValue:参数默认值 |
[!Tip]
- 当传递普通参数时,若形参与地址参数名不一致则需要使用@RequestParam说明。
- 集合类型参数和请求参数同名,可以使用@RequestParam注解映射到对应名称的集合对象中作为数据。