返回前端頁面的屬性名稱和實體類的名稱不一致用@JsonProperty @SerializedName


場景:比如前端要求你返回一個json數據類型,但是這個json類型的里面屬性有的值重復了,比如

{
name:zhangsan,
age:12,
teacher:[
name:Mrs Liu
subject:math
]
}

就像這樣,出現了兩個name,但是前端就是要求這樣傳的,很蛋疼有沒有,都是name,時間長了就不知道啥意思了,所以,咱們有解決一下

@JsonProperty("name")
private String teacherName;

在這篇文章中,我們將介紹如何將多個字段名稱映射到一個字段屬性上。如果你的應用有多個接口數據,那么使用 @SerializedName 注解就可以解決,你仍然可以使用原來的model類,而不必增加新的model類。

@SerializedName 延伸

在第一個 @SerializedName 注解文章中,基本用法如下:

public class UserSimple { 

給 Model 變量添加注解,並可以序列化和反序列化。

但是,還不能滿足我們的需求,SerializedName 接受兩個參數,value、alternate,第一個value是默認參數,如果你只填了一個參數,那這個值將會賦值給 value,第二個 alternate 就為空,同樣都填上也是ok的。

public class UserSimpleSerializedName { @SerializedName(value = "fullName", alternate = "username") private String name; private String email; private boolean isDeveloper; private int age; } 

SerializedName 改變了默認序列化和默認反序列化的字段取值,所以,如果你使用 Gson 將 Java model 類生稱 JSON 串,結果就是 value 的名稱就是字段的名稱。

alternate 屬性是用在反序列化上的,也就是說從 JSON 到 Java 類的過程。Gson 會幫我們匹配 JSON 中的命名,並嘗試找到一個字段映射。對於上面例子model類中,Gson 會將字段 fullname 或者 username 映射到字符串 name上。無論哪一個都會映射。

如果在 model 中給變量使用了 @SerializedName 的兩個屬性,那么最終會返回相同的 Java 對象,例如:

{    
  'fullName': 'Norman',   
 'email': 'norman@futurestud.io'
}

{    
    'username': 'Norman',   
    'email': 'norman@futurestud.io'
}

再來看一個例子:

   {
       'username': 'Norman',   
       'fullName': 'Marcus',   
       'email': 'norman@futurestud.io'
  }

如果多個字段匹配一個變量字段,誰在后面Gson就會將值賦給誰,結果最終是 name:Marcus。




 

public class User {  
      
    @JsonProperty(value = "Name")  
    private String name;  
      
    @JsonProperty(value = "Age")  
    private int age;  
}  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM