因爲SpringMVC 不會自動將String類型轉換成時間類型,因此需要自己寫工具類來實現轉換
本篇主要分3點。
1. 測試SpringMVC 對時間類型的轉換問題
2. 如何解決。
3. 簡單講解一下原理
此例子轉換兩種數據類型
- Date類型
- Timestamp 類型
代碼已發佈到github
Controller 類
@Controller
@RequestMapping("/Test")
public class testController {
@RequestMapping("/form")
@ResponseBody
private String form(TestEntity testEntity){
System.out.println("測試成功");
System.out.println(testEntity);
return "ok";
}
}
Entity實例類
private String name;
private String Data;
private Date date;
private Timestamp timestamp;
測試頁面代碼
<label >姓名
<input type="text" name="name"/>
</label>
<label >Date
<input type="text" name="Data"/>
</label>
<label >date
<input type="text" name="date"/>
</label>
<label >Timestamp
<input type="text" name="timestamp"/>
</label>
開始測試
- 首先測試String 類型的轉換
也就是最常用的 轉換成的String類型
後端獲取到的數據
TestEntity{name='藍藍', Data='2017-8-16', date=null, timestamp=null}
- 測試轉換Date類型的
第三個數據是轉換成Date類型的。提交的時候出現
那是因爲SpringMVC 並不能直接把String轉成Date類型
解決辦法:
1. 寫一個工具類 實現Coverter接口
public class DateConverter implements Converter<String,Date> {
public Date convert(String source) {
String pattern = source.length()==10 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat format = new SimpleDateFormat(pattern);
try {
return format.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
2. 在SpringMvc 的配置文件中註冊 Converter
<mvc:annotation-driven conversion-service="customConversionService">
</mvc:annotation-driven>
<bean id="customConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.Util.DateConverter"/>
<bean class="com.Util.TimeSteamp"/>
</set>
</property>
</bean>
效果圖:
後端獲取到的數據
TestEntity{name='123', Data='2017-11-1', date=2017-11-01, timestamp=null}
- 轉換成Timesteam類型
同理轉換類:
public class TimeSteamp implements Converter<String,Timestamp> {
public Timestamp convert(String source) {
/**
* 注意Timestamp 只能是yyyy-MM-dd HH:mm:ss 這種格式
*/
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return new Timestamp(format.parse(source).getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
測試圖:
TestEntity{name='藍藍', Data='2017-11-1', date=2017-11-01, timestamp=2017-11-01 12:23:12.0}
總結: 以上就是SpringMVC轉換時間類型的方法
接下來簡單的講解一下我對於這個org.springframework.format.support.FormattingConversionServiceFactoryBean
類的一些理解
- 首先它是一個工廠類,配置有轉換器和格式化程序,用於常見類型,如數字和數據時間。
- 可以通過兩個方法來聲明註冊。轉換器:
setConverters(Set)
和格式化器:setFormatters(Set)
- 剛剛我在SpringMVC配置聲明這個類,就註冊了這個
setConverters(Set)
這個方法 - 再講解一下我寫的轉換類,也是實現了Converter接口的。
代碼已發佈到github
如有錯誤,歡迎指出。