@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。

推薦閱讀: