首先应当明确,哪五种?
- 普通参数:请求参数名与形参名不同时。
什么意思?下面的图可以更加直观的明白,其实这个作用是在方便客户这一块,后端定义了userName吧,现在前端输入user就可以了,不用输入username,但是需要声明一下,@RequestParam("name")
,用这个声明。
用postman访问/commonParamDifferentName
,这个地址,虽然方法里面定义的是userName,但是它关联了name,因此前端可以输入name来传参,而且,并不能使用username,也就是说,关联了其他的内容,自己的东西就用不了了。
- POJO参数。这个东西就是一个表里面的一个整合,比如说一个user的pojo类,里面有name和age两个字段,用户访问指定的路径的时候,输好这个pojo的类属性就可以直接封装成一个user类。
如下图,我这里有个pojo类user,里面就是name和age属性。
下面是controller层的写法,传入的参数直接是一个user对象。
现在用postman访问这个路径,下面有返回结果,说明是访问成功了。
- 嵌套POJO参数。嵌套也好理解, 在我这个例子里就是user表嵌套了address表。
嵌套的这个controller层里面的东西还是和上面一样的。
现在使用postman去访问上面的路径,这里存在嵌套pojo类,在输入参数的时候就需要注意一下写法。
- 数组参数。这个就好理解了,数组嘛,多选嘛,一个变量,多个结果,比如需要统计用户的爱好,那一个likes字段让用户进行多选,唱、跳、rap、篮球都可以是用户的爱好,都可以传进来。
下面使用postman去访问上面的路径。spring会帮助我们直接封装好。
5. 集合参数。用这个集合的话和数组大致是差不多的,只有两个地方不一样,一个是拿过来的类型,这个不用说,现在这个肯定是封装成集合了,第二个就是需要注释。告诉spring,我这个是个集合。
下面是全部的代码:
//请求参数
@Controller
public class UserController {
//普通参数:请求参数与形参名称对应即可完成参数传递
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
System.out.println("普通参数传递 name ==> "+name);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param'}";
}
//普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name") String userName , int age){
System.out.println("普通参数传递 userName ==> "+userName);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param different name'}";
}
//POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
System.out.println("pojo参数传递 user ==> "+user);
return "{'module':'pojo param'}";
}
//嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递
@RequestMapping("/pojoContainPojoParam")
@ResponseBody
public String pojoContainPojoParam(User user){
System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
return "{'module':'pojo contain pojo param'}";
}
//数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
return "{'module':'array param'}" + Arrays.toString(likes);
}
//集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
System.out.println("集合参数传递 likes ==> "+ likes);
return "{'module':'list param'}" ;
}
总结一下
- 两个需要注解的地方,一个是给参数定义别名的时候,定了别名是给前端用的。另一个是声明集合的时候。
- pojo类嵌套的时候被嵌套的需要写全,比如address.city。