SpringMVC 接收時間類型

因爲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>

開始測試

  1. 首先測試String 類型的轉換
    也就是最常用的 轉換成的String類型

1.jpg

後端獲取到的數據
TestEntity{name='藍藍', Data='2017-8-16', date=null, timestamp=null}

  1. 測試轉換Date類型的

2.jpg

第三個數據是轉換成Date類型的。提交的時候出現

2.1.jpg

那是因爲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>

效果圖:

3.jpg

後端獲取到的數據
TestEntity{name='123', Data='2017-11-1', date=2017-11-01, timestamp=null}

  1. 轉換成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;
    }
}

測試圖:

4.jpg

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

如有錯誤,歡迎指出。

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