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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM