- 多层级对象的数据绑定
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/map.do?users[key1].name=jack&users[key1].age=21&users[key2].name=Tom
- 关于json的数据绑定
注意:要在pom.xml配置jackson-mapper-asl的依赖
@RequestMapping(value = "json.do")
@ResponseBody
public String object(@RequestBody 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
public String object(@RequestBody User user){
return user.toString();
另外,在开发过程中,对于可能为空的数据,最好使用包装类型。