spring-boot 日期轉換


在springboot里面有的小伙伴可能遇到過這樣一個問題:

  通過表單提交發送請求,后台用一個對象接收,類似String,int,Long這樣的都能正常接收,一旦有日期類型的(Date)的,無法正常接收,甚至連方法也沒有進入,給人一種沒有提交到后台的錯覺,

其實並非沒有提交到后台,只是在處理的時候,String轉換Date轉換失敗,此時需要手動轉換。

 

例如前台用一個表單提交個人信息,如int,String等都無須其它處理,但是如果有日期類型的,則無法轉換,下圖是表單提交的代碼:

后台是用對象(User)接收的,如下圖 :

下圖是User對象,生日是日期類型的 :

此時請求報如下異常:

 

 請求到后台的時候,spingboot會自動進行轉化,此時無法將字符串轉化為Date,此時就需要我們強制轉化:

  1>寫一個StringToDateConverter implements Converter<String,Date> ,並實現convert方法 

        2>添加配置:如下圖

做完以上兩步String就可以自動轉換為Date了,這時在發送剛才的請求如下圖:

 

以下是:StringToDateConverter的代碼:

import org.apache.commons.lang3.StringUtils;
import org.springframework.core.convert.converter.Converter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDateConverter implements Converter<String,Date> {
private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";
private static final String shortDateFormat = "yyyy-MM-dd";
private static final String dateFormat2 = "yyyy/MM/dd HH:mm:ss";
private static final String shortDateFormat2 = "yyyy/MM/dd";
@Override
public Date convert(String source) {
if (StringUtils.isBlank(source)) {
return null;
}
source = source.trim();
try {
SimpleDateFormat formatter;
if (source.contains("-")) {
if (source.contains(":")) {
formatter = new SimpleDateFormat(dateFormat);
} else {
formatter = new SimpleDateFormat(shortDateFormat);
}
Date dtDate = formatter.parse(source);
return dtDate;
} else if (source.contains("/")) {
if (source.contains(":")) {
formatter = new SimpleDateFormat(dateFormat2);
} else {
formatter = new SimpleDateFormat(shortDateFormat2);
}
Date dtDate = formatter.parse(source);
return dtDate;
}
} catch (Exception e) {
throw new RuntimeException(String.format("parser %s to Date fail", source));
}

throw new RuntimeException(String.format("parser %s to Date fail", source));

}
}

 

希望能幫到小伙伴們,謝謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM