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更合适.

  • 相关阅读:
    chmod
    How to Mount an NTFS Filesystem
    关于三层架构和AJAX的一点联系
    Visual Studio开启.NET Framework源代码调试(Debug the Source Code for the .NET Framework Libraries)
    SQL语句中的子查询应用
    .NET中总共有多少种类型、多少个命名空间呢?
    Visual Studio中的《C# 语言规范》
    Visual Studio “类视图”和“对象浏览器”图标含义
    .NET程序员必备参考图片
    Microsoft Visual Studio Learning Pack 2.0
  • 原文地址:https://www.cnblogs.com/guo-rong/p/9198106.html
Copyright © 2011-2022 走看看