SpringMVC数据绑定

本文详细介绍了SpringMVC中的数据绑定技术,包括基本类型的绑定、数组和对象的绑定、多层级对象的数据处理方法,以及如何使用List、Set和Map进行数据绑定。此外,还深入探讨了JSON和XML数据的绑定方式,以及通过PropertyEditor、Formatter和Converter实现的数据自动转换技巧。
摘要由CSDN通过智能技术生成

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

    @Override
    public 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")
    @ResponseBody
    public 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值