SpringMVC数据绑定

来源:互联网 发布:中世纪2王国战役优化9 编辑:程序博客网 时间:2024/06/01 08:35

SpringMVC数据绑定

  1. 基本类型和包装类型的区别:

    基本类型是必传的,包装类型可以不传,并且只能是int类型

  2. 基本类型加上@RequestParam(“age”),可以绑定对应名字的参数,并且可以为空

  3. 数组绑定:String[] name

    可以绑定请求参数中多个相同的key的值

  4. 对象的绑定

    pojo: 和指定对象里面的字段的名字相同就可以

    vo: 传数据时要用“属性对象.字段“来设置多层级对象的数据

  5. 多个对象字段冲突的情况下:

    会给所有对象相应字段赋值

    可以用前缀来区分

    //在跳转到Controller之前初始化@InitBinder("user")public void initUser(WebDataBinder binder){binder.setFieldDefaultPrefix("user.")}
  6. List的绑定

    传List需要新建一个数据收集对象,如ListForm, get set一下List属性字段

    索引下角标传参:users[0].name=Tom&user[1].name=Lucy

    list大小为下标的最大值,也就是请求的索引一定是连续的,否则会造成空索引和资源浪费

  7. Set的绑定

    同样也需要一个收集对象,和List的差不多,传参也差不多

    区别:需要对Set进行初始化,传参的下标必须在set的大小范围内

    一般是用来排查重复的,可以重写hashCode和equals方法来排重(但也会影响初始化的大小,如初始化时添加两个相同的对象,这时set的size是1不是2)

  8. Map数据绑定

    如果key相同认为是同一个,也需要一个数据收集对象,如UserMapForm,里面有个map< String, User>属性users (需要set,get方法)

    传参:users[“x”].name=Tom&users[“x”].age=10

  9. Json绑定

    传Json数据,加注解@RequestBody, 传参时会转换为类,需要配置json转化工具,如jackson

  10. xml数据绑定

    同样加@RequestBody注解,同时配置spring-oxm的xml解析工具

    相关的类上也要加上注解:

    类名:@XmlRootElement(name=”admin”)

    getName方法上加上@XmlElement(name=”name”)

  11. 自动转化之PropertyEditor

    继承PropertyEditorSupport, 重写setAsT xt

    @Overridepublic void setAsText(String text) throws IllegalrgumentException{  User u = new User();  String[] textArray = text.split(",");  u.setName(textArray[0]);  u.setAge(Integer.parseInt(textArray[1]));  this.setValue(u)}

    日期转化:

    @RequestMapping(value="date1.do")@ResponseBodypublic String date1(Date date1){  return date1.toStrng();}

    转换器注册:

    //不是全局的@InitBinder("date1")public void initDate1(WebDateBinder binder){   binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));   //传true表示可以为空}

  12. 自动转化之Formatter

    CurrencyFormatter formatter = new CurrencyFormatter();formatter.setFractionDigits(2);formatter.setRoundingMode(RoundingMode.CEILING);//formater能够按照规则转化数据 Assert.assertEquals(new BigDecimal("123.12"), formatter.parse("$123.125"),Locale.US)

    全局的写法:

    实现Formatter类,写对应的转换方法,然后在Spring中配置bean

    mvc:annotation-driven conversion-service=下面的id //不加不会生效bean id class=FormattingConversionServiceFactory    property name=formatters        set            bean class=MyDateFormatter
  13. 自动转化之Converter

    需要在Spring中注入,有多个内置实现类,内置的不可扩展

    //实现方法public class MyDateConverter implements Converter<String,Date>    public Date convert(String source)

    同时也要配置Spring,将上面formatter的name=formatters改为name=converters