SpringMVC數據綁定入門

  • 多層級對象的數據綁定
    User對象屬性裏有一個是ContactInfo對象
public class User{
   private String name;
   private Integer age;
   private ContactInfo contactInfo;
   
   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;
   } 
   public ContactInfo getContactInfo (){
     return contactInfo;
   }
   public void setContactInfo(ContactInfo contactInfo){
     this.contactInfo = contactInfo;
   } 
}
@RequestMapping(value = "object.do")
@ResponseBody
public String object(User user){
   return user.toString();
}

綁定時我們只需加上聲明的對象的變量名就可以了:
http://localhost:8080/object.do?name=jack&age=12&contactInfo.phone=1380013800

  • 同屬性的多對象
    有一個Admin的類的屬性是和User類一樣的,這時候需要一個InitBinder註解來解決
@RequestMapping(value = "object.do")
@ResponseBody
public String object(User user,Admin admin){
   return user.toString()+" "+admin.toString();
}
@InitBinder("user")
public void initUser(WebDataBinder binder){
  binder.setFieldDefaultPrefix("user.");
}
@InitBinder("admin")
public void initUser(WebDataBinder binder){
  binder.setFieldDefaultPrefix("admin.");
}

綁定時我們只需加上聲明的對象的前綴就可以了:
http://localhost:8080/object.do?user.name=jack&admin.name=bob

  • 關於List的數據綁定
    SpringMVC是不支持這樣寫的:
@RequestMapping(value = "list.do")
@ResponseBody
public String object(List<User> userList){
   return userList.toString();
}

我們需要聲明一個包含List類型屬性的類來綁定:
創建一個UserListForm類:

public class UserListForm(){
  private List<User> users;
  public List<User> getUsers(){
     return users;
   }
   public void setName(List<User> users){
     this.users= users;
   } 

用UserListForm 來綁定數據:

@RequestMapping(value = "list.do")
@ResponseBody
public String object(UserListForm userListForm ){
   return userListForm.toString();
}

http://localhost:8080/list.do?users[0].name=jack&users[1].name=bob
綁定時要注意下標索引的連續,儘量避免空間的浪費

  • 關於Set的數據綁定
    Set類型在實際應用場景中的作用常用於重複對象判斷和排除重複。
    Set在運用時需要初始化,且SpringMVC對Set類型的支持也不夠好,所以在實際開發中,Set基本上用不到。
  • 關於Map的數據綁定
    因爲Map類型的key是唯一,Map適用於非重複的場景或者允許重複被覆蓋的場景。
    先創建一個包含Map類型的類:
public class UserMapForm(){
  private Map<String,User> users;
  public Map<String,User> getUserMap(){
     return userMap;
   }
   public void setUserMap(Map<String,User> userMap){
     this.userMap = userMap;
   } 

用UserMapForm來綁定數據:

@RequestMapping(value = "map.do")
@ResponseBody
public String object(UserMapForm userMapForm ){
   return userMapForm .toString();
}

http://localhost:8080/list.do?users[‘X’].name=jack&users[‘X’].age=21&users[‘Y’].name=Tom

  • 關於json的數據綁定
    注意:要在pom.xml配置jackson-mapper-asl的依賴
@RequestMapping(value = "json.do")
@ResponseBody
//使用ResponseBody進行一個反序列化
public String object(@ResponseBody User user){
   return user.toString();
}
  • 關於xml的數據綁定
    要在實體類上加上兩個註解
@XmlRootElement(name="user")
public class User{
   private String name;
   private Integer age;
   @XmlElement(name="name")
   public String getName(){
     return name;
   }
   public void setName(String name){
     this.name = name;
   } 
   @XmlElement(name="age")
   public Integer getAge(){
     return age;
   }
   public void setAge(Integer age){
     this.age = age;
   } 
}
@RequestMapping(value = "xml.do")
@ResponseBody
//使用ResponseBody進行一個反序列化
public String object(@ResponseBody User user){
   return user.toString();

另外,在開發過程中,對於可能爲空的數據,最好使用包裝類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章