当POJO中使用简单类型属性时, 参数名称与POJO类属性名保持一致
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("/requestParam1")
public String requestParam1(String name ,String age){
System.out.println("name="+name+",age="+age);
return "page.jsp";
}
@RequestParam 的使用
类型: 形参注解
位置:处理器类中的方法形参前方
作用:绑定请求参数与对应处理方法形参间的关系
访问http://localhost/requestParam2?userName=Jock
总结一下就是使得url中的请求参数与形参保持一致
当POJO中使用简单类型属性时, 参数名称与POJO类属性名保持一致
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注解进行区分
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
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;
}</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;
}</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";
}</string>
注意: SpringMVC默认将List作为对象处理,赋值前先创建对象,然后将nick作为对象的属性进行处理。由于
List是接口,无法创建对象,报无法找到构造方法异常;修复类型为可创建对象的ArrayList类型后,对象可
以创建,但没有nick属性,因此数据为空。此时需要告知SpringMVC的处理器nick是一组数据,而不是一个单
一数据。通过@RequestParam注解,将数量大于1个names参数打包成参数数组后, SpringMVC才能识别该数
据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据。
Original: https://www.cnblogs.com/spring-ioc/p/16482856.html
Author: 你问人生何
Title: Spring不同类型参数传参
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574237/
转载文章受原作者版权保护。转载请注明原作者出处!