zoukankan      html  css  js  c++  java
  • springMVC的 Converter转换器 和 Formatter

    Converter转换器

    spring的Converter是可以将一种类型转换成另一种类型的一个对象, 自定义Converter需要实现Converter接口

    日期转换器

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import org.springframework.core.convert.converter.Converter;
    /**
     * 字符串日期格式转换器
     *
     */
    public class CustomGlobalStrToDataConverter implements Converter<String, Date>{
        
        private String datePattern;//日期格式
        
        //创建对象,并传入构造参数
        public CustomGlobalStrToDataConverter(String datePattern){
            this.datePattern = datePattern;
        }
    
        @Override
        public Date convert(String source) {
            
            try {
                Date date = new SimpleDateFormat(datePattern).parse(source);
                return date;
            } catch (ParseException e) {
                e.printStackTrace();
            }
            
            return null;
        }
    
    }

    使用SpringMVC自定义的Converter, 需要在SpringMVC的配置文件中加入如下配置

    <!-- 注解驱动:替我们显示的配置了最新版的注解的处理器映射器和处理器适配器 -->
    <mvc:annotation-driven conversion-service="myConversionService"/>
    
    <!-- 配置自定义转换器 注意: 一定要将自定义的转换器配置到注解驱动上,id不能使用conversionService,不然会出现ArrayList<?>的异常-->
    <bean id="myConversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
           <set>
              <!-- 指定自定义转换器的全路径名称 -->
               <bean class="com.guorong.controller.converter.CustomGlobalStrToDataConverter">
                    <constructor-arg name="datePattern" type="java.lang.String" value="yyyy-MM-dd hh:mm:ss"/>
               </bean>
           </set>
        </property>
    </bean>

    Formatter

    Formatter和Converter一样, 是将一种类型转换成另一种类型, 但是, Formatter的源类型必须是一个String, 目标类型是java类型.

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    import org.springframework.format.Formatter;
    
    public class DateFormatter implements Formatter<Date>{
        
        private String datePattern;//日期格式字符串
        
        private SimpleDateFormat dateFormat;//日期格式类
        
        public DateFormatter(String datePattern) {
            this.datePattern = datePattern;
            dateFormat = new SimpleDateFormat(datePattern);
        }
        
        //将Date格式化为指定日期字符串,返回目标对象的字符串表示法
        @Override
        public String print(Date date, Locale locale) {
            return dateFormat.format(date);
        }
        
        //将字符串日期解析成Date对象
        @Override
        public Date parse(String source, Locale locale) throws ParseException {
            
            return dateFormat.parse(source);
        }
    
    }

     springMVC配置文件

    <!-- 注解驱动: 替我们显示的配置了最新版的注解的处理器映射器和处理器适配器 -->
    <mvc:annotation-driven conversion-service="conversionService"/>
    
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
         <property name="formatters">
              <set>
                 <bean class="com.guorong.controller.converter.DateFormatter">
                     <constructor-arg name="datePattern" type="java.lang.String" value="yyyy-MM-dd"/>
                 </bean>
              </set>
         </property>
    </bean>

    选择Converter, 还是Formatter

        Converter是一般工具, 可以将一种类型转换成另一种类型, 例如, 将String转换成Date, 或者Long转换成Date, Conveter既可以用在web层, 也可以用在其他层中,  Formatter只能讲String转换层另一种java类型, 例如, 将String转换成Date, 但它不可能将Long转换成Date类型, 因此Formatter适用于web层, 因此, SpringMVC应用程序中, 选择Formatter比选择Converter更合适.

  • 相关阅读:
    CUDA编程学习笔记2
    CUDA编程学习笔记1
    论文阅读 <Relocalization, Global Optimization and Map Merging for Monocular Visual-Inertial SLAM>
    Adding Cues (线索、提示) to Binary Feature Descriptors for Visual Place Recognition 论文阅读
    Omnidirectional DSO: Direct Sparse Odometry with Fisheye Cameras 论文摘要
    CUDA C编程入门
    PatchMatchStereo可能会需要的Rectification
    PatchMatch小详解
    PatchMatch Stereo
    PatchMatch笔记
  • 原文地址:https://www.cnblogs.com/guo-rong/p/9198106.html
Copyright © 2011-2022 走看看