- 多層級對象的數據綁定
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();
另外,在開發過程中,對於可能爲空的數據,最好使用包裝類型。