spring mvc数据绑定
2016-06-17 12:12
288 查看
DataBinderController.java
package com.wyc.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.xml.ws.BindingType;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.wyc.model.Admin;
import com.wyc.model.User;
import com.wyc.model.UserListForm;
import com.wyc.model.UserMapForm;
import com.wyc.model.UserSetForm;
@Controller
@RequestMapping(value="/data")
public class DataBinderController {
//-----------基本类型-----------------
//http://localhost:8080/SpringMVC/data/baseType1?age=1
//不指定age的情况下会出现500错误:
//org.springframework.web.util.NestedServletException:
//Request processing failed;
//nested exception is java.lang.IllegalStateException:
//Optional int parameter 'age' is present but cannot be translated into a null
//@requestParam是传递时的参数名称,使用之后上述地址必须改为:
//http://localhost:8080/SpringMVC/data/baseType1?xage=1
@RequestMapping("/baseType1")
@ResponseBody
public String baseType1(@RequestParam(name="xage")int age){
return "age:" + age;
}
//-------------基本类型的包装类型----------------
//http://localhost:8080/SpringMVC/data/baseType2
//此处使用包装类型,因此允许参数为空,结果输出为age:null
@RequestMapping("/baseType2")
@ResponseBody
public String baseType2(Integer age){
return "age:" + age;
}
//----------单个object对象--------------
//user还有另外一个对象
//1、不输入任何参数:http://localhost:8080/SpringMVC/data/object
//结果:User [name=null, age=0, contactInfo=null]
//2、http://localhost:8080/SpringMVC/data/object?age=1&name=fdsk&contactInfo.tel=1389234&contactInfo.address=fds
//结果:User [name=fdsk, age=1, contactInfo=ContactInfo [tel=1389234, address=fds]]
//3、http://localhost:8080/SpringMVC/data/object?user.age=10&user.name=fjdsklk(可见该种方式并不支持)
//User [name=null, age=0, contactInfo=null]
@RequestMapping("/object")
@ResponseBody
public String object(User user){
return user.toString();
}
//--------多个object对象(存在相同属性名称)-----------
//1、http://localhost:8080/SpringMVC/data/objects?name=fsdl只传属性名称
//结果:User [name=fsdl, age=0, contactInfo=null] Admin [name=fsdl, age=0](都被赋值)
//2、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl
//结果:User [name=null, age=0, contactInfo=null] Admin [name=null, age=0](没有成功赋值)
//3、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl(此处需加上下面的俩个方法)
//结果:User [name=fdjlsj, age=0, contactInfo=null] Admin [name=fsdjkl, age=0]
//4、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl&user.contactInfo.address=324(同样需要加上下面的俩个方法,并且此处还使用了user对象的contactInfo属性)
//结果:User [name=fdjlsj, age=0, contactInfo=ContactInfo [tel=null, address=324]] Admin [name=fsdjkl, age=0]
@RequestMapping("/objects")
@ResponseBody
public String objects(User user,Admin admin){
return user.toString() + " " + admin.toString();
}
@InitBinder("user")
public void initUser(WebDataBinder binder){
binder.setFieldDefaultPrefix("user.");
}
@InitBinder("admin")
public void initAdmin(WebDataBinder binder){
binder.setFieldDefaultPrefix("admin.");
}
//--------list------------
//以下写法无效
/*
@RequestMapping("/list")
@ResponseBody
public String list(List users){
StringBuilder stringBuilder = new StringBuilder();
for(User user : users){
stringBuilder.append(user.toString()).append(" ");
}
return stringBuilder.toString();
}
*/
//以下才是正确的写法(list不需要初始化,可以看到UserListForm类中并没有初始化。这点和set不同)
//1、http://localhost:8080/SpringMVC/data/list?users[0].name=fhdsk&users[1].name=fdsjl
//结果:UserListForm [users=[User [name=fhdsk, age=0, contactInfo=null], User [name=fdsjl, age=0, contactInfo=null]]]
//2、http://localhost:8080/SpringMVC/data/list?users[0].name=fhdsk&users[5].name=fdsjl
//结果:UserListForm [users=[
//User [name=fhdsk, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=fdsjl, age=0, contactInfo=null]]](此时users的size变为6)
@RequestMapping("/list")
@ResponseBody
public String list(UserListForm users){
return users.toString();
}
//------------set-------------------
//http://localhost:8080/SpringMVC/data/set?users[0].name=fhdsk&users[1].name=fdsjl
//结果:500异常,因为UserSetForm里面并没有初始化,初始化后的结果如下:
//UserSetForm [users=[User [name=fhdsk, age=0, contactInfo=null], User [name=fdsjl, age=0, contactInfo=null]]]
//但此时users限制了只有俩个的大小(在UserSetForm里面指定的),加上第三个依旧会报错
@RequestMapping("/set")
@ResponseBody
public String set(UserSetForm users){
return users.toString();
}
//-----------map-----------
//http://localhost:8080/SpringMVC/data/map?userMap[%27x%27].name=fhdsk&userMap[%27y%27].name=fdsjl
//注意是userMap而不是users,此处的userMap对应于UserMapForm的属性名称
//结果:UserMapForm [userMap={x=User [name=fhdsk, age=0, contactInfo=null], y=User [name=fdsjl, age=0, contactInfo=null]}]
@RequestMapping("/map")
@ResponseBody
public String map(UserMapForm users){
return users.toString();
}
//-------------json---------
//注意需要配置spring配置文件,并引入依赖
@RequestMapping("/json")
@ResponseBody
public String json(@RequestBody User user){
return user.toString();
}
//-------------xml---------
//注意需要配置spring配置文件,并引入依赖
@RequestMapping("/xml")
@ResponseBody
public String xml(@RequestBody Admin admin){
return admin.toString();
}
//-----------PropertyEditor---------
//http://localhost:8080/SpringMVC/data/pe?date1=2018-01-01
//结果:Mon Jan 01 00:00:00 CST 2018
//若没有initDate1方法会报400错误
@RequestMapping("/pe")
@ResponseBody
public String pe(Date date1){
return date1.toString();
}
@InitBinder("date1")
public void initDate1(WebDataBinder binder){
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
//------------formatter&converter------------
//需要在spring配置文件中配置相关信息
//http://localhost:8080/SpringMVC/data/date?date=2018-02-02
//结果:Fri Feb 02 00:00:00 CST 2018
@RequestMapping("/date")
@ResponseBody
public String date(Date date){
return date.toString();
}
}
实体类
Admin.java
User.java
ContaceInfo.java
中介类(沃兹季硕德,具体称呼不详)
UserListForm.java
UserSetForm.java
UserMapForm.java
转换器
MyDateConverter .java
格式器
MyDateFormatter.java
web.xml
spring配置文件
json绑定结果:
xml绑定结果:
package com.wyc.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.xml.ws.BindingType;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.wyc.model.Admin;
import com.wyc.model.User;
import com.wyc.model.UserListForm;
import com.wyc.model.UserMapForm;
import com.wyc.model.UserSetForm;
@Controller
@RequestMapping(value="/data")
public class DataBinderController {
//-----------基本类型-----------------
//http://localhost:8080/SpringMVC/data/baseType1?age=1
//不指定age的情况下会出现500错误:
//org.springframework.web.util.NestedServletException:
//Request processing failed;
//nested exception is java.lang.IllegalStateException:
//Optional int parameter 'age' is present but cannot be translated into a null
//@requestParam是传递时的参数名称,使用之后上述地址必须改为:
//http://localhost:8080/SpringMVC/data/baseType1?xage=1
@RequestMapping("/baseType1")
@ResponseBody
public String baseType1(@RequestParam(name="xage")int age){
return "age:" + age;
}
//-------------基本类型的包装类型----------------
//http://localhost:8080/SpringMVC/data/baseType2
//此处使用包装类型,因此允许参数为空,结果输出为age:null
@RequestMapping("/baseType2")
@ResponseBody
public String baseType2(Integer age){
return "age:" + age;
}
//----------单个object对象--------------
//user还有另外一个对象
//1、不输入任何参数:http://localhost:8080/SpringMVC/data/object
//结果:User [name=null, age=0, contactInfo=null]
//2、http://localhost:8080/SpringMVC/data/object?age=1&name=fdsk&contactInfo.tel=1389234&contactInfo.address=fds
//结果:User [name=fdsk, age=1, contactInfo=ContactInfo [tel=1389234, address=fds]]
//3、http://localhost:8080/SpringMVC/data/object?user.age=10&user.name=fjdsklk(可见该种方式并不支持)
//User [name=null, age=0, contactInfo=null]
@RequestMapping("/object")
@ResponseBody
public String object(User user){
return user.toString();
}
//--------多个object对象(存在相同属性名称)-----------
//1、http://localhost:8080/SpringMVC/data/objects?name=fsdl只传属性名称
//结果:User [name=fsdl, age=0, contactInfo=null] Admin [name=fsdl, age=0](都被赋值)
//2、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl
//结果:User [name=null, age=0, contactInfo=null] Admin [name=null, age=0](没有成功赋值)
//3、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl(此处需加上下面的俩个方法)
//结果:User [name=fdjlsj, age=0, contactInfo=null] Admin [name=fsdjkl, age=0]
//4、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl&user.contactInfo.address=324(同样需要加上下面的俩个方法,并且此处还使用了user对象的contactInfo属性)
//结果:User [name=fdjlsj, age=0, contactInfo=ContactInfo [tel=null, address=324]] Admin [name=fsdjkl, age=0]
@RequestMapping("/objects")
@ResponseBody
public String objects(User user,Admin admin){
return user.toString() + " " + admin.toString();
}
@InitBinder("user")
public void initUser(WebDataBinder binder){
binder.setFieldDefaultPrefix("user.");
}
@InitBinder("admin")
public void initAdmin(WebDataBinder binder){
binder.setFieldDefaultPrefix("admin.");
}
//--------list------------
//以下写法无效
/*
@RequestMapping("/list")
@ResponseBody
public String list(List users){
StringBuilder stringBuilder = new StringBuilder();
for(User user : users){
stringBuilder.append(user.toString()).append(" ");
}
return stringBuilder.toString();
}
*/
//以下才是正确的写法(list不需要初始化,可以看到UserListForm类中并没有初始化。这点和set不同)
//1、http://localhost:8080/SpringMVC/data/list?users[0].name=fhdsk&users[1].name=fdsjl
//结果:UserListForm [users=[User [name=fhdsk, age=0, contactInfo=null], User [name=fdsjl, age=0, contactInfo=null]]]
//2、http://localhost:8080/SpringMVC/data/list?users[0].name=fhdsk&users[5].name=fdsjl
//结果:UserListForm [users=[
//User [name=fhdsk, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=fdsjl, age=0, contactInfo=null]]](此时users的size变为6)
@RequestMapping("/list")
@ResponseBody
public String list(UserListForm users){
return users.toString();
}
//------------set-------------------
//http://localhost:8080/SpringMVC/data/set?users[0].name=fhdsk&users[1].name=fdsjl
//结果:500异常,因为UserSetForm里面并没有初始化,初始化后的结果如下:
//UserSetForm [users=[User [name=fhdsk, age=0, contactInfo=null], User [name=fdsjl, age=0, contactInfo=null]]]
//但此时users限制了只有俩个的大小(在UserSetForm里面指定的),加上第三个依旧会报错
@RequestMapping("/set")
@ResponseBody
public String set(UserSetForm users){
return users.toString();
}
//-----------map-----------
//http://localhost:8080/SpringMVC/data/map?userMap[%27x%27].name=fhdsk&userMap[%27y%27].name=fdsjl
//注意是userMap而不是users,此处的userMap对应于UserMapForm的属性名称
//结果:UserMapForm [userMap={x=User [name=fhdsk, age=0, contactInfo=null], y=User [name=fdsjl, age=0, contactInfo=null]}]
@RequestMapping("/map")
@ResponseBody
public String map(UserMapForm users){
return users.toString();
}
//-------------json---------
//注意需要配置spring配置文件,并引入依赖
@RequestMapping("/json")
@ResponseBody
public String json(@RequestBody User user){
return user.toString();
}
//-------------xml---------
//注意需要配置spring配置文件,并引入依赖
@RequestMapping("/xml")
@ResponseBody
public String xml(@RequestBody Admin admin){
return admin.toString();
}
//-----------PropertyEditor---------
//http://localhost:8080/SpringMVC/data/pe?date1=2018-01-01
//结果:Mon Jan 01 00:00:00 CST 2018
//若没有initDate1方法会报400错误
@RequestMapping("/pe")
@ResponseBody
public String pe(Date date1){
return date1.toString();
}
@InitBinder("date1")
public void initDate1(WebDataBinder binder){
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
//------------formatter&converter------------
//需要在spring配置文件中配置相关信息
//http://localhost:8080/SpringMVC/data/date?date=2018-02-02
//结果:Fri Feb 02 00:00:00 CST 2018
@RequestMapping("/date")
@ResponseBody
public String date(Date date){
return date.toString();
}
}
实体类
Admin.java
package com.wyc.model; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="admin") public class Admin { private String name; private int age; @XmlElement(name="name") public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement(name="age") public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Admin [name=" + name + ", age=" + age + "]"; } }
User.java
package com.wyc.model; public class User { private String name; private int age; private ContactInfo contactInfo; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public ContactInfo getContactInfo() { return contactInfo; } public void setContactInfo(ContactInfo contactInfo) { this.contactInfo = contactInfo; } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", contactInfo=" + contactInfo + "]"; } }
ContaceInfo.java
package com.wyc.model; public class ContactInfo { private String tel; private String address; public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "ContactInfo [tel=" + tel + ", address=" + address + "]"; } }
中介类(沃兹季硕德,具体称呼不详)
UserListForm.java
package com.wyc.model; import java.util.List; public class UserListForm { private List users; public List getUsers() { return users; } public void setUsers(List users) { this.users = users; } @Override public String toString() { return "UserListForm [users=" + users + "]"; } }
UserSetForm.java
package com.wyc.model; import java.util.LinkedHashSet; import java.util.Set; public class UserSetForm { private Set users; public UserSetForm() { users = new LinkedHashSet(); users.add(new User()); users.add(new User()); } public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; } @Override public String toString() { return "UserSetForm [users=" + users + "]"; } }
UserMapForm.java
package com.wyc.model; import java.util.Map; public class UserMapForm { private Map userMap; public Map getUserMap() { return userMap; } public void setUserMap(Map userMap) { this.userMap = userMap; } @Override public String toString() { return "UserMapForm [userMap=" + userMap + "]"; } }
转换器
MyDateConverter .java
package com.wyc.convertor; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.core.convert.converter.Converter; public class MyDateConverter implements Converter{ @Override public Date convert(String arg0) { try{ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); return simpleDateFormat.parse(arg0); }catch(Exception e){ e.printStackTrace(); } return null; } }
格式器
MyDateFormatter.java
package com.wyc.convertor; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import org.springframework.format.Formatter; public class MyDateFormatter implements Formatter{ @Override public String print(Date arg0, Locale arg1) { // TODO Auto-generated method stub return null; } @Override public Date parse(String text, Locale arg1) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); return simpleDateFormat.parse(text); } }
web.xml
Archetype Created Web Applicationmvc-dispatcherorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/configs/spring/applicationContext.xml1mvc-dispatcher/
spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
json绑定结果:
xml绑定结果:
相关文章推荐
- JAVA JDK1.5-1.9新特性
- spring注解 总结
- Spring 攻略第004讲
- springMVC源码下载地址
- Java封装、继承、多态三大特征的理解
- Java检查型异常和非检查型异常
- SpringMVC访问静态资源的三种方式
- java检查异常与非检查异常
- Java Calendar 类的格式操作
- git diff java 实现
- java的HashMap与ConcurrentHashMap
- Eclipse中SVN过滤指定文件夹或文件下内容
- apktool编译和反编译apk与ecplise多渠道打包
- <并发编程的艺术>读书笔记-第三章java内存模型的基础
- spring里面事务的传播属性和事务隔离级别
- java 动态代理
- MiniUI支持Java Struts MVC
- java 的引用类型
- C#和java中泛型的本质区别
- Java与Struts结合写一个简单基础的分页显示