Spring不同类型参数传参

莱莱  金牌会员 | 2022-8-27 18:40:59 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 993|帖子 993|积分 2979

普通类型传参

当POJO中使用简单类型属性时, 参数名称与POJO类属性名保持一致
POJO类
 
  1. public class User {
  2.    private String name;
  3.    private Integer age;
  4.    
  5.    public String getName() {
  6.        return name;
  7.    }
  8.    public void setName(String name) {
  9.        this.name = name;
  10.    }
  11.    public Integer getAge() {
  12.        return age;
  13.    }
  14.    public void setAge(Integer age) {
  15.        this.age = age;
  16.    }
  17. }
复制代码
 
Controller
  1. @RequestMapping("/requestParam1")
  2. public String requestParam1(String name ,String age){
  3.     System.out.println("name="+name+",age="+age);
  4.     return "page.jsp";
  5. }
复制代码
 
  访问URL: http://localhost/requestParam1?name=itheima&age=14 
 
 **@RequestParam** 的使用 类型: 形参注解 位置:处理器类中的方法形参前方 作用:绑定请求参数与对应处理方法形参间的关系
  1. //方法传递普通类型参数,使用@RequestParam参数匹配URL传参中的参数名称与方法形参名称
  2. //http://localhost/requestParam2?userName=Jock
  3. @RequestMapping("/requestParam2")
  4. public String requestParam2(@RequestParam(value = "userName",required = true) String name){
  5.     System.out.println(name);
  6.     return "page.jsp";
  7. }
复制代码
访问http://localhost/requestParam2?userName=Jock总结一下就是使得url中的请求参数与形参保持一致   POJO类型参数传参

当POJO中使用简单类型属性时, 参数名称与POJO类属性名保持一致 
1
POJO类
  1. public class User {
  2.    private String name;
  3.    private Integer age;
  4.    
  5.    public String getName() {
  6.        return name;
  7.    }
  8.    public void setName(String name) {
  9.        this.name = name;
  10.    }
  11.    public Integer getAge() {
  12.        return age;
  13.    }
  14.    public void setAge(Integer age) {
  15.        this.age = age;
  16.    }
  17. }
复制代码
 
Controller
  1. @RequestMapping("/requestParam3")
  2. public String requestParam3(User user){
  3.    System.out.println("name="+user.getName());
  4.    return "page.jsp";
  5. }
复制代码
 
最终访问http://localhost/requestParam3?name=itheima&age=14  
方法传递POJO类型参数,URL地址中的参数作为POJO的属性直接传入对象
 
**参数冲突**
当POJO类型属性与其他形参出现同名问题时,将被同时赋值
建议使用@RequestParam注解进行区分
 
 
 
 
2
Controller
  1. //当方法参数中具有POJO类型参数与普通类型参数嘶,URL地址传入的参数不仅给POJO对象属性赋值,也给方法的普通类型参数赋值
  2. @RequestMapping("/requestParam4")
  3. public String requestParam4(User user,int age){
  4.     System.out.println("user="+user+",age="+age);
  5.     return "page.jsp";
  6. }
复制代码
 最终访问//http://localhost/requestParam4?name=Jock&age=39
 
 
复杂POJO类型参数

3
当POJO中出现对象属性时,参数名称与对象层次结构名称保持一致  
 POJO
  1. public class User {
  2.     private String name;
  3.     private Integer age;
  4.     private Address address;
  5.    
  6.     public Address getAddress() {
  7.         return address;
  8.     }
  9.     public void setAddress(Address address) {
  10.         this.address = address;
  11.     }
  12.     public String getName() {
  13.         return name;
  14.     }
  15.     public void setName(String name) {
  16.         this.name = name;
  17.     }
  18.     public Integer getAge() {
  19.         return age;
  20.     }
  21.     public void setAge(Integer age) {
  22.         this.age = age;
  23.     }
  24. }
复制代码
 
 Controller
使用对象属性名.属性名的对象层次结构可以为POJO中的POJO类型参数属性赋值
  1. @RequestMapping("/requestParam5")
  2. public String requestParam5(User user){
  3.     System.out.println(user.getAddress().getCity());
  4.     return "page.jsp";
  5. }
复制代码
 访问//http://localhost/requestParam5?address.city=beijing  
一层套一层
 
 
 
4 当POJO中出现List,保存对象数据,参数名称与对象层次结构名称保持一致,使用数组格式描述集合中对象的位置
POJO
  1. public class User {
  2.     private String name;
  3.     private Integer age;
  4.     private List<Address> addresses;
  5. }
  6. public class Address {
  7.     private String province;
  8.     private String city;
  9.     private String address;
  10. }
复制代码
 
Controller
 
POJO中List对象保存POJO的对象属性赋值,使用[数字]的格式指定为集合中第几个对象的属性赋值

  1. @RequestMapping("/requestParam6")
  2. public String requestParam6(User user){
  3.     System.out.println(user);
  4.     return "page.jsp";
  5. }
复制代码
 访问//http://localhost/requestParam7?addresses[0].city=beijing&addresses[1].province=hebei
 
 
5  **当POJO中出现Map,保存对象数据,参数名称与对象层次结构名称保持一致,使用映射格式描述集合中对象的位置** 
POJO
  1.  public class User {
  2.     private String name;
  3.     private Integer age;
  4.     private Map<String,Address> addressMap;
  5. }
  6. public class Address {
  7.     private String province;
  8.     private String city;
  9.     private String address;
  10. }
复制代码
Controller
POJO中Map对象保存POJO的对象属性赋值,使用[key]的格式指定为Map中的对象属性赋值
  1. @RequestMapping("/requestParam8")
  2. public String requestParam8(User user){
  3.     System.out.println(user.getAddressMap());
  4.     return "page.jsp";
  5. }
复制代码
http://localhost/requestParam8?addressMap['job'].city=beijing&addressMap['home'].province=henan
 
数组与集合类型参数传参

数组类型参数
请求参数名与处理器方法形参名保持一致,且请求参数数量> 1个  
访问URL: http://localhost/requestParam9?nick=Jockme&nick=zahc  
  1. @RequestMapping("/requestParam9")
  2. public String requestParam9(String[] nick){
  3.     System.out.println(nick[0]+","+nick[1]);
  4.     return "page.jsp";
  5. }
复制代码
集合类型参数
保存简单类型数据,请求参数名与处理器方法形参名保持一致,且请求参数数量> 1个
访问URL: http://localhost/requestParam10?nick=Jockme&nick=zahc
  1. @RequestMapping("/requestParam10")
  2. public String requestParam10(@RequestParam("nick") List<String> nick){
  3.     System.out.println(nick);
  4.     return "page.jsp";
  5. }
复制代码
注意: SpringMVC默认将List作为对象处理,赋值前先创建对象,然后将nick作为对象的属性进行处理。由于
List是接口,无法创建对象,报无法找到构造方法异常;修复类型为可创建对象的ArrayList类型后,对象可
以创建,但没有nick属性,因此数据为空。此时需要告知SpringMVC的处理器nick是一组数据,而不是一个单
一数据。通过@RequestParam注解,将数量大于1个names参数打包成参数数组后, SpringMVC才能识别该数
据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据。  
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表