springMVC的 Converter轉換器 和 Formatter

Converter轉換器

spring的Converter是能夠將一種類型轉換成另外一種類型的一個對象, 自定義Converter須要實現Converter接口java

日期轉換器web

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的配置文件中加入以下配置spring

<!-- 註解驅動:替咱們顯示的配置了最新版的註解的處理器映射器和處理器適配器 -->
<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類型.mvc

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配置文件ide

<!-- 註解驅動: 替咱們顯示的配置了最新版的註解的處理器映射器和處理器適配器 -->
<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更合適.工具

相關文章
相關標籤/搜索