JackJson中自定義JsonSerializer的使用
阿新 • • 發佈:2019-08-19
最近在做一個需求,一個時間欄位,資料庫型別為timestamp,預設值為'1970-01-01 08:00:01',產品要求這種情況展示為“-1”,實體類中的屬性型別為Date,我也不能把Date屬性值設定為“-1”,又不想新加一個String型別的屬性,那怎麼辦呢?
遇到這種問題,可以使用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 <b>not</b> 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) throws IOException { if (THOUSAND_MILLISECOND.equals(value.getTime())) { gen.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資訊,那麼就沒有型別而言,因為都是