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的属性不进行赋值
        }
  • 相关阅读:
    RepositoryItemComboBox 用法1
    php 直接获取url参数赋值成变量。省去繁琐的获取参数,再一个个赋值
    什么是经验,就是解决问题的能力!!
    win7 上运行 php7 +
    win2008 server 多IP配置
    mysqlli 的基本用法
    PHP操作mongoDB 笔记
    关于PHP程序员技术职业生涯规划 转自 韩天锋
    linux 简单笔记
    ubantu 重启mysql
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/7345023.html
Copyright © 2011-2022 走看看