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

起因

最近在項目使用json字符串轉javaBean 在轉換過程當中發現json轉到JavaBean的時候屬性名稱不一至。例如json字符串爲:java

{
    "code": "1",
    "message": "操做成功"
}
複製代碼

後端javaBean爲:json

@Data
public class Result implements Serializable {
    private String aaa;
    private String bbb;
}
複製代碼

解決方法

引用 jackson-annotations maven依賴 裏面有@JsonProperty 和 @JsonAlias 能夠實現這個問題,可是這裏註解有什麼區別呢?後端

  1. @JsonProperty 這個註解提供了序列化和反序列化過程當中該java屬性所對應的名稱,什麼意思呢?簡單的來講就是json字符串轉javaBean或者javaBean轉json字符串時會將屬性映射爲@JsonProperty設置的value ,例如:maven

    @Data
    public class Result implements Serializable {
      @JsonProperty("code")
      private String aaa;
      @JsonProperty("message")
      private String bbb;
    }
    複製代碼

    反序列化結果:spa

    {
        "code": "1",
        "message": "操做成功"
    }
    複製代碼

    咱們發現一個問題,返回的json並非code

    {
        "aaa"1",
        "bbb": "操做成功"
    }
    複製代碼

    若是咱們想要實現上面的結果,那麼就要用到@JsonAlias了。字符串

  2. @JsonAlias 這個註解只只在反序列化時起做用,指定該java屬性能夠接受的更多名稱,什麼意思呢?簡單來講就是json字符串轉javaBean的時候會生效,例如:string

    @Data
    public class Result implements Serializable {
      @JsonAlias("code")
      private String aaa;
      @JsonAlias("message")
      private String bbb;
    }
    複製代碼

    反序列化結果:it

    {
        "aaa": "1",
        "bbb": "操做成功"
    }
    複製代碼

    達到了咱們想要的結果。io

  3. 總結:以上就是本次在項目中遇到的問題,若有那塊有問題或者想要補充的,歡迎指出,謝謝。

相關文章
相關標籤/搜索