zoukankan      html  css  js  c++  java
  • Spring MVC的参数类型转换

    数据定流程
    • 1. Spring MVC 主框架将 ServletRequest 象及目方法的入参传递给 WebDataBinderFactory 例,以DataBinder
    • 2. DataBinder 用装配在 Spring MVC 上下文中的ConversionService 数据转换、数据格式化工作。将 Servlet 中的求信息填充到入参象中
    • 3. Validator 经绑定了求消息的入参行数据合法性校,并最生成数据BindingData
    • 4. Spring MVC 抽取 BindingResult 中的入参象和校验错误对象,将它们赋给处理方法的响应入参

    Spring MVC 上下文中内建了很多转换器,可完成大多数 Java 型的转换工作 ,也可以进行自定义的转化

    自定义参数类型转换

    //首先实现Convert接口
    @Component
    public class Sting2StudentConvert implements Converter<String, Student>{ @Override public Student convert(String s) { if(s==null) return null; String arg[]=s.split("@"); return new Student(Integer.parseInt(arg[0]),arg[1]); } }
        //这里一定加上RequestParam的注解,要不系统就直接用默认的转换器,找int赋值给id,String赋值给name
        //加了注解之后,name对应的Sting就是要给Student,就变为String->Student的转换,使用的就是自定义的转换器
        @RequestMapping("/TestMyConvert")
        public String TestMyConvert(@RequestParam("name") Student student){
            System.out.println(student); //输出Student{id=12, name='lzzz'}
            return SUCCESS;
        }

    配置,ConversionServiceFactoryBean里面的set中加入要配置的转换器,然后将其注册到annotation-driven中

        <mvc:annotation-driven conversion-service="conversionService"/>
    
        <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
            <property name="converters">
                <set>
                    <ref bean="sting2StudentConvert"></ref>
                </set>
            </property>
        </bean>
    InitBinder注解,用于初始化weddatabind的一些数据,对于同一个controller中起作用
    /*
        * 由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用
        * 于完成由表单字段到 JavaBean 属性的绑定
        *  @InitBinder方法不能有返回值,它必须声明为void。
        *  @InitBinder方法的参数通常是是 WebDataBinder
        * */
        @InitBinder
        void testInibinder(WebDataBinder binder){
            System.out.println(binder.getFieldDefaultPrefix());
            System.out.println(binder.getFieldMarkerPrefix());
            binder.setDisallowedFields("name");   //这里设置的是对于name的属性不进行赋值
        }
  • 相关阅读:
    一些javascript的常用方法(转载)
    php在线处理视频 (在线视频转码,取得视频信息)
    在JS中最常看到切最容易迷惑的语法(转)
    jquery ui resizable bug
    设计技巧
    超大记录量数据库设计
    相似度分析(转)
    linux vi 替换命令
    今天发现一个关于CSS的东东,解决了我很多疑问
    Http Handler 介绍
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/7345023.html
Copyright © 2011-2022 走看看