@JsonSerialize不起作用的解決方案
@JsonSerialize不起作用
在項目中 當字段實體類為Long類型時
如果Long值超過前端js顯示的長度范圍時會導致前端回顯錯誤
此時我們想到的解決方案是將Long值返回給前端時轉為String,
但是我們又不想變更字段的類型,當然我們也不想額外添加新的字段。
這個時候我們可以用@JsonSerialize,在Json序列化的時候把Long自動轉為String,
但是這裡有個小坑
被轉換的字段必須是包裝類類型,否則會轉換失敗。
@JsonSerialize(using = ToStringSerializer.class) private Long parentId; //轉化成功
@JsonSerialize(using = ToStringSerializer.class) private long parentId; //轉化失敗
@JsonSerialize正確使用
實際開發中,我們一定遇到過這樣的問題:前端顯示和後臺存儲數據單位不統一,而且各有各自的理由,統一不瞭,那就隻能由後端轉換。
每次返回給前端時再轉換一遍,返回給前端的json數據,在後端裡定義的往往是一個對象,如何做到優雅的轉換呢?隻需兩步操作:
1. 寫一個負責轉換的類
裡面寫好規則
public class MySerializerUtils extends JsonSerializer<Integer> { @Override public void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { String statusStr = ""; switch (status) { case 0: statusStr = "新建狀態"; break; case 1: statusStr = "就緒狀態"; break; case 2: statusStr = "運行狀態"; break; case 3: statusStr = "阻塞和喚醒線程"; break; case 4: statusStr = " 死亡狀態"; break; default: statusStr = "狀態信息不符合"; } jsonGenerator.writeString(statusStr); } }
2. 在實體類上需要裝換的字段上加上註解
/** * 多線程生命周期狀態值 */ @JsonSerialize(using = MySerializerUtils.class) private int status;
註:@JsonSerialize註解,主要應用於數據轉換,該註解作用在該屬性的getter()方法上。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 基於@JsonSerialize和@JsonInclude註解使用方法
- java中的JsonSerializer用法,前後端單位轉換必備
- springboot @JsonSerialize的使用講解
- SpringBoot雪花算法主鍵ID傳到前端後精度丟失問題的解決
- SpringBoot主鍵ID傳到前端後精度丟失的問題解決