(八)springMvc 的参数绑定

版权声明:转载请给出原文链接 https://blog.csdn.net/youngyouth/article/details/82749635

参数绑定

将客户端传来的 key/value 数据,绑定到 Controller 参数的过程 ;

这一过程发生在调用 处理器适配器 的时候,spring 会去调用 参数绑定 组件,我使用的版本(4.5),是使用 converter 进行任意支持类型的转换的,除去一些 时间 不能进行转换 ;

其实 spring 中内置了许多的 converter ,可以看做是转换器,帮我们进行参数绑定 ;

  1. 默认支持类型

    默认支持的类型:HtppServletRequestHtppServletResponseHttpSessionModel或ModelMap ;当 springMvc 发现 Controller 方法的形参是上面的类型时,就会调用响应的 converter 进行参数绑定 ;

  2. 对简单类型的支持

    controller 方法形参是简单类型的时候,SpringMvc 也会进行参数绑定,不过有个限制,形参的名字和 key 的名字要一样 ;

    对于,这样的限制,我们当然不能忍受了,我们才是 code world 的掌控者,怎么能受限于一个参数绑定,这时候可以使用 @RequestParam来破掉这一限制 ;

    @RequestParam 参数讲解:

    name :当形参名字和 key 不一样的时候 ,使用 name 来告诉 springMvc 给我进行参数绑定,按照和 name 相同的 key

    required : 表示形参是否是必须的 ,如果 不是必须的,则可以不传参数进来 ;

    defaultValue :默认值 ,如果形参没有参数传进来,则使用该默认值 ;

  3. pojo类型

    页面中提交的数据的名字,必须和 pojo 的属性名一致 ;页面中提交的数据的名字,必须和 pojo 的属性名一致 ;

    比如,pojo 中有个 name 属性,那么页面中的对应数据想要参数绑定到 pojo 对象中,则 key 必须也是 name ;比如,pojo 中有个 name 属性,那么页面中的对应数据想要参数绑定到 pojo 对象中,则 key 必须也是 name ;比如,pojo 中有个 name 属性,那么页面中的对应数据想要参数绑定到 pojo 对象中,则 key 必须也是 name ;比如,pojo 中有个 name 属性,那么页面中的对应数据想要参数绑定到 pojo 对象中,则 key 必须也是 name

  4. 自定义参数绑定

    对于一些情况下 , springMvc 内置的 converter 总是不能满足的我们需求,我们需要自定义参数绑定 ,比如时间类型的参数绑定 ;

    实现 org.springframework.core.convert.converter.Converter ,注意不要导错包 ;

    /**
     * 完成日期 的参数绑定
     * @author An
     * @date 2018年9月17日20:11:59
     */
    public class DateConverter implements Converter<String,Date> {
    
        /**
         * 日期转换类
         */
        private SimpleDateFormat simpleDateFormat  = new SimpleDateFormat("yy-MM-dd") ;
    
        @Override
        public Date convert(String source) {
            try {
                return simpleDateFormat.parse(source)  ;
            } catch (ParseException e) {
                e.printStackTrace();
            }
    //        转换失败,就返回 null  ;
            return null  ;
        }
    }
    

    springMvc.xml 中进行配置

    <!--使用注解的映射器、适配器-->
    <!-- 添加 conversion-service 配上下面的id  -->
        <mvc:annotation-driven conversion-service="conversionService"/>
    
        <!--配置 自定义 参数绑定-->
        <bean  class="org.springframework.format.support.FormattingConversionServiceFactoryBean" id="conversionService">
            <!--写上自定义的转换器-->
            <property name="converters">
                <list>
                    <!--日期 转换 -->
                    <bean class="xin.ijava.ssm.converter.DateConverter"/>
                </list>
            </property>
        </bean>
    
  5. 包装类型 pojo 参数绑定

    其实和 pojo 类型一样 ;

    只是包装类型的 pojo 中嵌套着 pojo ,此时赋值,使用 嵌套的pojo.属性名 ,作为网页的 name 属性的值 ;

    <input id="itemName" type="text" name="itemCustomer.name"/>
    

    尽量使用包装类型,便于扩展,解决不同类之间属性重名问题 ,比如形参有 userbook ,它们都有属性 name,此时页面中就可以使用pojo.name 为它们赋值;

  6. 数组绑定

    形参是数组的时候,跟基本数据类型一样,形参的名字 和 网页 name 值一样;

  7. list 绑定

    list 绑定,将 list 放在 pojo 中进行绑定,也就是 pojo 中属性为 list,此时形参还是一个包装的 pojo

    要将数据提交到 list 中的对象的属性上,只需要将网页的 name 的值,设为 list[下标].属性

  8. map 绑定

    还是将 map 放在 pojo 中进行绑定,网页上的 name 属性的值为 map['key']

猜你喜欢

转载自blog.csdn.net/youngyouth/article/details/82749635