SpringMVC数据绑定总结
来源:互联网 发布:编程语言实现模式 pdf 编辑:程序博客网 时间:2024/05/17 18:02
SpringMVC数据绑定总结
SpringMVC数据绑定 Kay 2017.7.5整理
源码地址:https://github.com/LiuKay/springmvc
1. 基本类型
推荐使用包装类型,注意@RequestParam注解的使用,其属性可以设置参数别名、设置参数是否必须,以及默认值
@RequestMapping(value = "/baseType") @ResponseBody //返回值放到Response的body区 public String baseType(@RequestParam("age") int age){ //使用int类型,如果不给请求添加age值,则会报错 //使用Integer包装类型不会报错,显示null return "age:"+age; }
@RequestMapping(value = "/WrapType") @ResponseBody public String baseType(Integer age){ return "age:"+age; }
2. 数组
//数组绑定 /arrayType?name=tom&name=lucy @RequestMapping("/arrayType") @ResponseBody public String array(String[] name){ StringBuilder sb=new StringBuilder(); for (String item :name){ sb.append(item).append(" "); } return sb.toString(); }
3. 对象
//todo 对象绑定 /objectType?name=tom&age=10//todo 复合对象 ///objectType? name=tom&age=10&contactinfo.phone=10086&contactinfo.address=china //todo 属性的多个对象 /objectType?user.name=tom&age=10 @RequestMapping("/objectType") @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 initAdmin(WebDataBinder binder){ binder.setFieldDefaultPrefix("admin."); }
4. 集合类型
List
//todo 集合数据绑定 //todo 数据收集对象UserListForm,绑定的是里面的users对象 //todo /list?users[0].name=tom&users[1].name=lucy // 请求索引要连续,不然会浪费很多空间(空对象) @RequestMapping(value = "/list") @ResponseBody public String list(UserListForm userList){ return userList.toString(); }
Set
//todo set的绑定与list的不同,set要初始化size大小,源码里面会判断index与size关系 // set 主要判断重复,在初始化set对象大小之后,重写hashcode和equals方法,空对象1个,size为1 // /set?users[0].name=tom&users[1].name=lucy @RequestMapping(value = "/set") @ResponseBody public String set(UserSetForm userSet){ return userSet.toString(); }
Map
//todo /map?users['x'].name=tom&users['y'].name=lucy @RequestMapping(value = "/map") @ResponseBody public String map(UserMapForm userMap){ return userMap.toString(); }
5. Json数据
在maven配置文件中加入jackson-databind的jar包依赖支持对json的解析
//todo json绑定 Content-Type:application/json // { // "name":"tom", // "age":10, // "contactInfo":{ // "address":"shenzhen", // "phone":10086 // } //} @RequestMapping(value = "/json") @ResponseBody public String json(@RequestBody User user){ return user.toString(); }
6. XML
//todo xml绑定 需要加入spring-oxm的jar包以及对象添加xml的注解 //Content-Type:application/xml // <?xml version="1.0" encoding="UTF-8"?> //<admin> // <name>tom</name> // <age>10</age> //</admin> @RequestMapping(value = "/xml") @ResponseBody public String xml(@RequestBody Admin admin){ return admin.toString(); }
对Admin类的修改:
package kay.model;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;/** * Created by kay on 2017/7/5. */@XmlRootElement(name="admin") //xml根节点public class Admin{ private String name; private String age; @Override public String toString() { return "Admin{" + "name='" + name + '\'' + ", age='" + age + '\'' + '}'; } @XmlElement(name="name") //xml属性节点 public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement(name="age") //xml属性节点 public String getAge() { return age; } public void setAge(String age) { this.age = age; }}
7. 数据格式转换
Spring支持的数据格式转换的三种接口
以Date类型为例:
第一种方式,使用PropertyEditor的实现类,使用CustomDateEditor这个类进行类型绑定
此方式配置的格式转换只在当前controller类中对一个属性生效
//todo 日期转换 /dateType?date1=2017-07-05 @RequestMapping(value = "/dateType") @ResponseBody public String date1(@RequestParam("date1") Date date1){ return date1.toString(); } //todo 局部有效,只在这个controller里面 @InitBinder("date1") public void initDate1(WebDataBinder binder){ binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat( "yyyy-MM-dd"),true)); }
第二种方式,实现Formatter接口,并在配置文件中配置bean对象
public class MyDateFormatter implements Formatter<Date>{ public Date parse(String s, Locale locale) throws ParseException { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); return sdf.parse(s); } public String print(Date date, Locale locale) { return null; }}
配置:
<mvc:annotation-driven conversion-service="myDateFormatter"/><!--todo 配置了一个全局的日期转换器 --> <bean id="myDateFormatter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <set> <bean class="kay.utils.MyDateFormatter"/> </set> </property> </bean>
第三种,实现Converter接口,并在配置文件中配置bean
/** * Created by kay on 2017/7/5. * Converter 接口可以自定义转换源的类型 */public class MyDateConverter implements Converter<String,Date>{ public Date convert(String s) { SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); try { return simpleDateFormat.parse(s); } catch (ParseException e) { e.printStackTrace(); } return null; }}
配置和上一种方法类似
<mvc:annotation-driven conversion-service="myDateConverter"/><bean id="myDateConverter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="kay.utils.MyDateConverter"/> </set> </property> </bean>
从Formatter接口和Converter接口的实现来看,Formatter只能从String类型转换,而Converter接口可以定义从任何类型转换成想要的类型。
阅读全文
0 0
- SpringMVC数据绑定总结
- springMVC入门总结(二)数据绑定
- 浅谈 SpringMVC 数据绑定
- 浅谈 SpringMVC 数据绑定
- SpringMVC 表单数据绑定
- SpringMVC数据绑定使用指南
- 浅谈 SpringMVC 数据绑定
- SpringMVC数据绑定
- 浅谈 SpringMVC 数据绑定
- SpringMVC数据绑定
- springmvc数据绑定
- springmvc 注解/数据绑定
- 浅谈 SpringMVC 数据绑定
- 浅谈 SpringMVC 数据绑定
- SpringMVC 数据绑定 Map
- SpringMvc数据绑定
- 浅谈SpringMVC数据绑定
- SpringMVC 数据绑定
- C++模拟string类
- ionic与Cordova的学习(补充)
- java并发编程实战-基础构建模块1
- python基础2之数据类型---列表
- 523. Continuous Subarray Sum
- SpringMVC数据绑定总结
- linux awk命令详解
- 欢迎使用CSDN-markdown编辑器
- android'为什么button在手机上会有阴影
- POJ2104 K-th Number 【线段树+二分】
- 归并排序原理及Java实现
- 指定浏览器内核
- 反向迭代器reverse_iterator与正向迭代器iterator之间的转换(list反向删除元素的方法)
- RCNN-配置时出现问题