SpringMVC總結之數據轉換器(例:時間參數轉換器)

 

1.前言

SpringMVC 通過反射機制對處理方法的簽名進行分析,並將請求信息綁定到處理方法的參數中,在請求消息到達處理方法期間,SpringMVC 還會完成數據轉換,數據格式化和數據檢驗等工作;

2.Converter轉換器

2.1 Spring在org.framework.core.convert.converter包中定義了3中類型的轉換器接口;

    2.1.1 Converter<S,T>接口:提供單一方法:T convert(S source);該方法負責將S類型的對象轉換爲T類型的對象;

    2.1.2 ConverterFactory<S,R> :提供單一方法 <T extends R>  Converter<S,T> getConverter(Class<T> targetType);該方法負責將一種類型的對象轉換爲另一種類型及其子類對象,例如String轉換爲Number及Number子類Integer、Double等對象;

    2.1.3 GenericConverter接口:該接口會根據源類對象及目標類對象的上下文信息進行類型轉換。接口定義的方法如下

            1)Set<GenericConverter.ConvertiblePair> getConvertibleTypes();

            2)Object convent(Object source TypeDescriptor sourceType,TypeDescriptor  targetType);

 

3.時間轉換器

3.1 在實際的開發過程中,前臺如果傳遞字符串類型的參數birthday(2018-08-01 12:06:11),後臺Date類型的birthday去接收這個值會報錯,所以我們需要自定義字符串轉時間類型的轉換器,將傳遞的字符串轉換爲Date類型;

3.2 實現步驟:

     3.2.1 定義實現Converter<S,T>接口的實現類

package org.aaron.framework.common;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class DateConverter implements Converter<String, Date> {

	private String pattern;
	
	public String getPattern() {
		return pattern;
	}

	public void setPattern(String pattern) {
		this.pattern = pattern;
	}

	@Override
	public Date convert(String date) {
		try {
		SimpleDateFormat dateFormat = new SimpleDateFormat(this.pattern);
			return dateFormat.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}

}

       3.2.2 在spriingmvc.xml(Spring MVC配置文件)中加入自定義轉換器:

	<!-- conversionService 自定義字符串-時間轉換器 -->
	<mvc:annotation-driven conversion-service="conversionService" />
		<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
			<!-- 轉換器 -->
			<property name="converters">
				<list>
					<bean class="org.aaron.framework.common.DateConverter" p:pattern="yyyy-MM-dd HH:mm:ss" />
				</list>
			</property>
		</bean>
	

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章