spring mvc綁定對象String轉Date 問題
1.問題
有時前臺頁面傳遞的參數 是時間字符串形式,而後臺接受的實體屬性類型是java.util.Date類型。springmvc 就無法將值set到該屬性上
2.原因
後臺的json 反序列化分 fastJson 和 jackson
fastjson默認使用的序列化格式:
public static String DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
jackson默認支持的日期反序列格式:
("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
jackson默認的日期反序列化不支持yyyy-MM-dd HH:mm:ss 這種格式,所以在屬性上加註解後臺依然報錯 有可能是註解的時間字符串格式不正確導致反序列化失敗
3.解決辦法
1.重寫jackson反序列化
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @version 1.0.0
* @description 重寫反序列化
**/
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = jp.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
然後在需要轉Date的屬性在加上註解
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
private Date txnTime;
使用這種方式,需要重寫上面反序列化抽象類
2.直接使用jackson註解,不需要重寫反序列化
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date txnTime;
GMT+8表示時區,東八區
3.直接使用fastjson註解,不要重寫反序列化
前提是已經導入了fastjson的依賴
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
<!-- jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.4</version>
</dependency>
在時間屬性上加上註解
@JSONField(format = “yyyy-MM-dd HH:mm:ss”)
private Date txnTime;
4.總結
兩種註解方法,導入的包有所不同,注意formatter 的時間字符串格式
5.鏈接
參考另一位大師的博客基礎上總結。
原文鏈接:https://blog.csdn.net/zhuralll112/article/details/89875212