Spring不同类型参数传参()

  本篇文章为你整理了Spring不同类型参数传参()的详细内容,包含有 Spring不同类型参数传参,希望能帮助你了解 Spring不同类型参数传参。

   public void setName(String name) {

   this.name = name;

   }

   public Integer getAge() {

   return age;

   }

   public void setAge(Integer age) {

   this.age = age;

   }

  }

 

 

  

  Controller

  

@RequestMapping("/requestParam1")

 

  public String requestParam1(String name ,String age){

   System.out.println("name="+name+",age="+age);

   return "page.jsp";

  }

 

  

   访问URL: http://localhost/requestParam1?name=itheima age=14

  

  **@RequestParam** 的使用

   类型: 形参注解

   位置:处理器类中的方法形参前方

   作用:绑定请求参数与对应处理方法形参间的关系

  

//方法传递普通类型参数,使用@RequestParam参数匹配URL传参中的参数名称与方法形参名称

 

  //http://localhost/requestParam2?userName=Jock

  @RequestMapping("/requestParam2")

  public String requestParam2(@RequestParam(value = "userName",required = true) String name){

   System.out.println(name);

   return "page.jsp";

  }

 

  访问http://localhost/requestParam2?userName=Jock

  总结一下就是使得url中的请求参数与形参保持一致

  

  

  

  POJO类型参数传参

  当POJO中使用简单类型属性时, 参数名称与POJO类属性名保持一致

  1

  POJO类

  

public class User {

 

   private String name;

   private Integer age;

  

   public String getName() {

   return name;

   }

   public void setName(String name) {

   this.name = name;

   }

   public Integer getAge() {

   return age;

   }

   public void setAge(Integer age) {

   this.age = age;

   }

  }

 

  

  Controller

  

@RequestMapping("/requestParam3")

 

  public String requestParam3(User user){

   System.out.println("name="+user.getName());

   return "page.jsp";

  }

 

  

  最终访问http://localhost/requestParam3?name=itheima age=14

  方法传递POJO类型参数,URL地址中的参数作为POJO的属性直接传入对象

  

  **参数冲突**
当POJO类型属性与其他形参出现同名问题时,将被同时赋值
建议使用@RequestParam注解进行区分

  

  

  

  

  2

  Controller

  

//当方法参数中具有POJO类型参数与普通类型参数嘶,URL地址传入的参数不仅给POJO对象属性赋值,也给方法的普通类型参数赋值

 

  @RequestMapping("/requestParam4")

  public String requestParam4(User user,int age){

   System.out.println("user="+user+",age="+age);

   return "page.jsp";

  }

 

  最终访问//http://localhost/requestParam4?name=Jock age=39

  

  

  复杂POJO类型参数

  3
当POJO中出现对象属性时,参数名称与对象层次结构名称保持一致

  POJO

  

public class User {

 

   private String name;

   private Integer age;

   private Address address;

   public Address getAddress() {

   return address;

   public void setAddress(Address address) {

   this.address = address;

   public String getName() {

   return name;

   public void setName(String name) {

   this.name = name;

   public Integer getAge() {

   return age;

   public void setAge(Integer age) {

   this.age = age;

  }

 

  

  Controller

  使用对象属性名.属性名的对象层次结构可以为POJO中的POJO类型参数属性赋值
 

  

 

 

  @RequestMapping("/requestParam5")

  public String requestParam5(User user){

   System.out.println(user.getAddress().getCity());

   return "page.jsp";

  }

 

  访问//http://localhost/requestParam5?address.city=beijing

  一层套一层

  

  

  

  4 当POJO中出现List,保存对象数据,参数名称与对象层次结构名称保持一致,使用数组格式描述集合中对象的位置

  POJO

  

public class User {

 

   private String name;

   private Integer age;

   private List Address addresses;

  public class Address {

   private String province;

   private String city;

   private String address;

  }

 

  

  Controller

  

  POJO中List对象保存POJO的对象属性赋值,使用[数字]的格式指定为集合中第几个对象的属性赋值
 

  

 

 

  @RequestMapping("/requestParam6")

  public String requestParam6(User user){

   System.out.println(user);

   return "page.jsp";

  }

 

  访问//http://localhost/requestParam7?addresses[0].city=beijing addresses[1].province=hebei

  

  

  5 **当POJO中出现Map,保存对象数据,参数名称与对象层次结构名称保持一致,使用映射格式描述集合中对象的位置**

  POJO

  

public class User {

 

   private String name;

   private Integer age;

   private Map String,Address addressMap;

  public class Address {

   private String province;

   private String city;

   private String address;

  }

 

  Controller

  POJO中Map对象保存POJO的对象属性赋值,使用[key]的格式指定为Map中的对象属性赋值

  

@RequestMapping("/requestParam8")

 

  public String requestParam8(User user){

   System.out.println(user.getAddressMap());

   return "page.jsp";

  }

 

  http://localhost/requestParam8?addressMap[job].city=beijing addressMap[home].province=henan

  

  数组与集合类型参数传参

  数组类型参数

  请求参数名与处理器方法形参名保持一致,且请求参数数量> 1个

  访问URL: http://localhost/requestParam9?nick=Jockme nick=zahc

  

 

 

  @RequestMapping("/requestParam9")

  public String requestParam9(String[] nick){

   System.out.println(nick[0]+","+nick[1]);

   return "page.jsp";

  }

 

  集合类型参数
保存简单类型数据,请求参数名与处理器方法形参名保持一致,且请求参数数量> 1个
访问URL: http://localhost/requestParam10?nick=Jockme nick=zahc

  

@RequestMapping("/requestParam10")

 

  public String requestParam10(@RequestParam("nick") List String nick){

   System.out.println(nick);

   return "page.jsp";

  }

 

  注意: SpringMVC默认将List作为对象处理,赋值前先创建对象,然后将nick作为对象的属性进行处理。由于
List是接口,无法创建对象,报无法找到构造方法异常;修复类型为可创建对象的ArrayList类型后,对象可
以创建,但没有nick属性,因此数据为空。此时需要告知SpringMVC的处理器nick是一组数据,而不是一个单
一数据。通过@RequestParam注解,将数量大于1个names参数打包成参数数组后, SpringMVC才能识别该数
据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据。

  

  以上就是Spring不同类型参数传参()的详细内容,想要了解更多 Spring不同类型参数传参的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: