springMVC的数据绑定
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的设置,是否设置默认值2. 数组作为Controller方法传参
1.1 例子传参 : http://localhost:8080/array.do?name=Tom&name=Lucy&name=Jim3. 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")@ResponseBodypublic String object(User user, Admin admin){ return user.toString() + ", " + admin.toString();}
4. 集合的绑定
4.1 List的绑定 4.1.1 List必须作为某个javaben的属性,比如public class UsersForm{ private List4.1.2 然后Controller方法就可以接收这个包含List集合作为属性的javabean为入参了users; //getter, setter, toString function...}
@RequestMapping(value="list.do")@ResponseBodypublic 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判定相同,否则抛异常
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=Lucy5. json和xml数据绑定
5.1 对http头必须设置content-type json设置的content-type="application/json" xml设置的content-type="application/xml" 5.2 通过Post传参, json的数据绑定需要用到RequestBody注解,这个注解用于读取body部分的数据@RequestMapping(value={"json.do","xml.do"})@ResposeBodypublic 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")@ResponseBodypublic 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{ 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{ 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}") @ResponseBodypublic 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 :删除资源, 具有幂等性