@JsonSerialize不起作用
在項目中 當字段實體類為Long類型時
如果Long值超過前端js顯示的長度范圍時會導致前端回顯錯誤
此時我們想到的解決方案是將Long值返回給前端時轉為String,
但是我們又不想變更字段的類型,當然我們也不想額外添加新的字段。
這個時候我們可以用@JsonSerialize,在Json序列化的時候把Long自動轉為String,
但是這里有個小坑
被轉換的字段必須是包裝類類型,否則會轉換失敗。
1
2
|
@JsonSerialize (using = ToStringSerializer. class ) private Long parentId; //轉化成功 |
1
2
|
@JsonSerialize (using = ToStringSerializer. class ) private long parentId; //轉化失敗 |
@JsonSerialize正確使用
實際開發中,我們一定遇到過這樣的問題:前端顯示和后臺存儲數據單位不統一,而且各有各自的理由,統一不了,那就只能由后端轉換。
每次返回給前端時再轉換一遍,返回給前端的json數據,在后端里定義的往往是一個對象,如何做到優雅的轉換呢?只需兩步操作:
1. 寫一個負責轉換的類
里面寫好規則
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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. 在實體類上需要裝換的字段上加上注解
1
2
3
4
5
|
/** * 多線程生命周期狀態值 */ @JsonSerialize (using = MySerializerUtils. class ) private int status; |
注:@JsonSerialize注解,主要應用于數據轉換,該注解作用在該屬性的getter()方法上。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/m0_37980582/article/details/103702651