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