• Spring MVC-自定义类型转换器


    Spring中的Conventer是如何实现的,因为他没有绑定类中的属性,它怎么知道要将那个String转换?看了几遍的书也没有找到,后来想想,其实我已经知道了,他的名字就是答案,转换器,因为已经告诉他了目标类型,所以只要实体类中有这个类型,在使用springMVC表单对象时就会启动,但是另外一个问题产生了,如果项目中有多个地方那个有了时间,一个时间格式是yyyy-MM-dd,另一个是yyyy-MM-dd HH:mm:ss,那么此时该如果让Spring确定该用那个conventer呢(这个需求在我现在做的项目中就有这样)??

    1.conversionService是Spring类型转换体系的核心借口

    2.可以利用ConversionserviceFactoryBean在Spring的

    IOC容器中定义一个ConversionService.

    Spring将自动识别出IOC容器中的ConversionService,并在Bean

    属性配置及SpringMVC处理方法入参绑定场合使用它进行数据的转换

    3.可以通过ConversionServiceFactoryBean的ConversionServiceFactoryBean

    的converters属性注册自定义的类型转换器

     <bean id="conversionService"
            class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <property name="formatters">
                <set>
                    <bean class="app07a.formatter.DateFormatter">
                        <constructor-arg type="java.lang.String" value="MM-dd-yyyy" />
                    </bean>
                </set>
            </property>
        </bean>

    在Spring中很多地方都用FactoryBean来整合第三方的框架的bean

    Spring支持的转换器

    Spring定义了3种类型的转换器借口,实现任意一个转换器接口都可以作为自定义转换器

    注册到ConversionServiceFactoryBean

    -Converter<S,T>:将s类型转换为T类型对象

    -coverterFactory: 将相同系列多个"同质"converter封装在一起,如果希望将一种

    类型的对象转换为另一种类型及其子类的对象(例如将String转换为Number以及Number

    子类(Integer,Long,Double等)对象)可使用该转换器工厂类

    -GenericConverter:会根据源类对象及目标对象所在的宿主类中的上下问信息进行类型转换

    <mvc:annotation-driver conversionService = "conversionService"/>会将自定义的ConversionService注册到Spring MVC的上下文中

    这个是一个简单的转换器

    1页面

    <form action="http://localhost:8080/springMVCapp07a/testConversionServiceConverter" method="post">
        <!--    private String name;
        private String description;
        private Float price;
        private Date productionDate;  -->
        <!--格式:java-javabase-12.0-2011.12.12  -->
        product:<input type="text" name="product">
        <input type="submit" value="submit">
        
    </form>

    转换器的类

    @Component
    public class ProcuctConverter implements  Converter<String, Product>
    {
    
        @Override
        public Product convert(String source)
        {
            if(source != null)
            {
                Product product = new Product();
                //java-javabase-12.0-2011.12.12
                String[] values = source.split("-");
                if(values != null && values.length==4)
                {
                    product.setName(values[0]);
                    product.setDescription(values[1]);
                    product.setPrice(Float.parseFloat(values[2]));
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    product.setProductionDate(new Date());
                    System.out.println(source + "--converter"+product);
                 return product;   
                }
                
                
            }
            return null;
        }

    springmvc配置文件

    <!--配置ConversionService  -->
        <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
            <property name="converters">
                <set>
                <ref bean="procuctConverter"/>
                </set>
            </property>
        </bean>

    记得要在annotation上加上这句

    <mvc:annotation-driven conversion-service="conversionService" />

    目标action

    @Controller
    public class testConversionService
    {
        @RequestMapping(value="/testConversionServiceConverter")    
        public String test(@RequestParam("product") Product product )
        {
            System.out.println("/testConversionServiceConverter"+product);
            return "ProductForm";
        }
    }
  • 相关阅读:
    分享在winform下实现左右布局多窗口界面续篇
    批处理加密与解密
    Winform应用程序实现通用遮罩层二
    Winform自定义窗体标题栏样式
    斯坦福 CS231n 全套解读 系列文章
    net use命令详解
    技术管理杂谈
    用命令行禁用网卡
    查看已连接的无线网密码(windows)
    Application.EnableVisualStyles()和Application.SetCompatibleTextRenderingDefault()的作用及用法
  • 原文地址:https://www.cnblogs.com/SFHa/p/10270060.html
Copyright © 2020-2023  润新知