天天看點

關于jackson 序列化反序列化屬性名稱問題

前言

最近在項目使用json字元串轉javaBean 在轉換過程中發現json轉到JavaBean的時候屬性名稱不一至。例如json字元串為:
{
    "code": "1",
    "message": "操作成功"
}
           
後端javaBean為:
@Data
public class Result implements Serializable {
    private String aaa;
    private String bbb;
}
           

解決方法

引用 jackson-annotations maven依賴

其中@JsonProperty 和 @JsonAlias 可以解決這個問題,下面詳細介紹他們的使用方法

  1. @JsonProperty 提供了序列化和反序列化過程中JavaBean屬性所對應的名稱,簡單的來說就是json字元串轉javaBean或者javaBean轉json字元串時會将屬性映射為@JsonProperty設定的value ,例如:
    @Data
    public class Result implements Serializable {
      @JsonProperty("code")
      private String aaa;
      @JsonProperty("message")
      private String bbb;
    }
               
    反序列化結果:
    {
        "code": "1",
        "message": "操作成功"
    }
               
    我們發現一個問題,傳回的json并不是我們想要的結果
    {
        "aaa"1",
        "bbb": "操作成功"
    }
               
    如果我們想要實作上面的結果,那麼就要用到@JsonAlias了。
  2. @JsonAlias 隻在反序列化時起作用,簡單來說就是json字元串轉javaBean的時候會生效,例如:
    @Data
    public class Result implements Serializable {
      @JsonAlias("code")
      private String aaa;
      @JsonAlias("message")
      private String bbb;
    }
               
    反序列化結果:
    {
        "aaa": "1",
        "bbb": "操作成功"
    }
               
    達到了我們想要的結果。
  3. 總結:以上就是本次在項目中遇到的問題,如有那塊有問題或者想要補充的,歡迎指出,謝謝。