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>