java中的JsonSerializer用法,前後端單位轉換必備
阿新 • • 發佈:2021-10-14
目錄
- 中的onSerializer用法
- 背景
- 演示
- 解決方法
- JackJson中自定義JsonSerializer使用
- 1、自定義類繼承JsonSerializer
- 2、在實體類的欄位上
- 3、使用效果
java中的JsonSerializer用法
背景
今天在寫專案的時候遇到一個問題,專案中有個類中有建立時間和更新時間兩個屬性,但是單位在後端用的是Date,而前端給的API中用的是秒。這就涉及到單位的轉換問題。但是如何優雅地對單位進行轉化呢?
演示
解決方法
利用@JsonSerialize註解,可以方便地實現將date資料轉換成long型資料等功能,該註解作用在屬性的getter()方法上。
1. 寫一個負責轉換的類,繼承自JsonSerializer類,裡面寫好規則
public class Date2LongSerializer extends JsonSerializer<Date> { @Override public void serialize(Date date,JsonGenerator jsonGenerator,SerializerProvider serializerProvider) throws IOException {//把Date轉成Long jsonGenerator.writeNumber(date.getTime() / 1000); } }
2. 在返回的引數里加上註解@JsonSerialize(using = XXX.class) XXX為上一步新建的轉換類
//建立時間 @JsonSerialize(using = Date2LongSerializer.class)//時間戳將Date轉成Long private Date categoryTime; //修改時間 @JsonSerialize(using = Date2LongSerializer.class) private Date updateTime;
這樣就完成了時間戳的轉換。
JackJson中自定義JsonSerializer使用
最近在做一個需求,一個時間欄位,型別為timestamp,預設值為'1970-01-01 08:00:01',產品要求這種情況展示為“-1http://www.cppcns.com
遇到這種問題,可以使用JackJson的@JsonSerialize,具體實現如下:
1、自定義類繼承JsonSerializer
public class DefaultTimeSerializer extends JsonSerializer<Date> {
/**
* Method that can be called to ask implementation to serialize
* values of type this serializer handles.
*
* @param value Value to serialize; can not be null.
* @param gen Generator used to output resulting Json content
* @param serializers Provider that can be used to get serializers for
*/
@Override
public void serialize(Date value,JsonGenerator gen,SerializerProvider serializers)ggUWDAIn throws IOException {
if (THOUSAND_MILLISECOND.equals(value.getTime())) {
genhttp://www.cppcns.com.writeString("-1");
} else {
gen.writeString(DateUtils.dateFormat(value,DateUtils.MONTH_PATTERN));
}
}
}
2、在實體類的欄位上
使用@JsonSerialize註解,並且指定要使用的Serializer
/** * 日期(精確到月) */ @JsonSerialize(using = DefaultTimeSerializer.class) private Date Time;
3、使用效果
其實使用SpringBoot的@RestController註解,我們最終返回的結果集都會被轉換為Json資訊,那麼就沒有型別而言,因為都是String格式的了。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。