springMVC的数据绑定java
1. 基本类型
1.1 好比int和Integer如何去选择做为Controller方法的入参
1.2 在入参上加上注解@RequestParam,
1.3 @RequestParam注解几个设置
1.3.1 value如何应用,value就是参数的别名, 并且http参数只能以别名传参
1.3.2 required为true,表示这个参数是必须传值的,
1.3.3 defaltValue的设置,是否设置默认值spring
2. 数组做为Controller方法传参
1.1 例子传参 : http://localhost:8080/array.do?name=Tom&name=Lucy&name=Jimjson
3. Object做为Controller方法传参
1.1 普通url例子传参: http://localhost:8080/object.do?name=Tom&age=10
1.2 若是Object的属性也是一个对象的传参
http://localhost:8080/object.do?name=Tom&age=10&contactInfo.phone=10086
1.3 若是Controller的入参有2个Object,而且这两个Object有同名称的属性,为了区分不一样的Object的属性
1.3.1 url能够是: http://localhost:8080/object.do?user.name=Tom&admin.name=Lucy&age=10
1.3.2 须要用到注解InitBinder,并写一个方法表示在Controller方法执行前执行数组
@InitBinder("user") //注解的value值对应执行方法的入参名称 public void initUser(WebDataBinder binder){ //方法的传参是WebDataBinder binder.serFieldDefaultPerfix("user."); //设置默认的前缀 } @InitBinder("admin")//注解的value值对应执行方法的入参名称 public void initAdmin(WebDataBinder binder){ binder.serFieldDefaultPerfix("admin."); }
1.3.3 则Controller方法以下服务器
@RequestMapping(value="object.do") @ResponseBody public String object(User user, Admin admin){ return user.toString() + ", " + admin.toString(); }
4. 集合的绑定
4.1 List的绑定
4.1.1 List必须做为某个javaben的属性,好比mvc
public class UsersForm{ private List<User> users; //getter, setter, toString function... }
4.1.2 而后Controller方法就能够接收这个包含List集合做为属性的javabean为入参了app
@RequestMapping(value="list.do") @ResponseBody public String list(UsersForm usersForm){ return "users.size :" + usersForm.users.size() + ", all users :" + usersForm.users.toString(); }
4.1.3 那么url传参能够是这个样子的
http://localhost:8080/list.do?users[0].name=Tom&users[1].name=Lucy&users[20].name=Jerry
4.1.4 注意
在url传参的时候,下标索引不要中间出现中断的数字,好比不要出现如上的从0,1直接到20的状况,虽然不会报错,可是建立中的2到19的元素的javabean
4.2 Set集合的绑定
4.2.1 Set一样须要做为某个javabean的属性,和List不一样的是,必须在javabean的构造方法里为Set属性初始化
4.2.2 Controller方法的处理同List绑定的Controller方法
4.2.3 url传参时,
4.2.3.1参数的下标不能中断,
4.2.3.2 在Set集合中的元素在复写hashCode方法以后,url传参的元素传给Set以后的元素不能hashCode断定相同,不然抛异常ui
4.3 Map集合的绑定
4.3.1 Map也和List同样,必须做为某个JavaBean 的属性
4.3.2 Controller方法同List绑定的Controller方法
4.3.3 传参例子以下: 中括号中的是key,等号后的为value
http://localhost:8080/map.do?users['x'].name=Tom&users['y'].name=Lucy url
5. json和xml数据绑定
5.1 对http头必须设置content-type
json设置的content-type="application/json"
xml设置的content-type="application/xml"
5.2 经过Post传参, json的数据绑定须要用到RequestBody注解,这个注解用于读取body部分的数据code
@RequestMapping(value={"json.do","xml.do"}) @ResposeBody public String json(@RequestBody User user){ return user.toString(); }
6. 数据转换,格式化
6.1 PropertyEditor接口, 默认实现类PropertyEditorSupport,主要方法setValue, getValue, setAsText
6.1.1 将一段字符串解析成一个javabean,或者将一个javabean转换成一个字符串
6.1.2 有不少默认的数据转换实现, 好比对Date的实现
@RequestMapping(value="date1.do") @ResponseBody public String date1(Date date1){ return date1.toString(); } //对如上的Controller处理方法,须要对入参的Date进行数据转换设置 @InitBinder("date1") public void initDate1(WebDateBinder binder){ binder.registerCustomEditor( //注册一个针对传参名称为date1的一个转换器 Date.class, //转换的目标类型 new CustomDateEditor( //一个springmvc默认提供的Date转换器 new SimpleDateFormatter("yyyy-MM-dd"), //字符串格式 true) //true表示转换器能够处理null,空字符串等 ); }
6.2 全局的转化器
6.2.1 Formatter
新建一个类实现Formatter接口
public class MyDateFormatter implements Formatter<Date> { public Date parse(String text, Locale locale) throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.parse(test); } public String print(Date obj, Locale locale){ return null; } }
6.2.2 Converter
public class MyDateConverter implements Converter<String, Date>{ public Date convert(String source){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try{ return sdf.parse(source); }catch(ParseException ex){ex.printStackTrace;}; } return null; }
7 RESTful
7.1 相似于这样的url
http://movie.douban.com/show/subject/11345/
7.2 对应的Controller的处理方法
须要用到注解 @PathVariable
@RequestMapping(value="/subject/{subjectId}") @ResponseBody public String subject(@PathVariable("subjectJd") String subjectId){ return subjectId; }
7.3 全称: Representational State Transfer (资源)表现层状态转换
7.3.1 资源,好比url只表示资源实体,并不表明资源的展示形式
7.3.2 资源的展示形式,经过http头的content-type/accept来在客户端和服务器之间控制
7.3.3 RESTful的状态转换
概念: 幂等性: 相同的URL,相同的参数的http请求,返回的响应相同
GET :获取资源 , 具备幂等性 POST :建立资源 , 不具备幂等性 PUT :建立或者更新资源, 具备幂等性 DELETE :删除资源, 具备幂等性