Jackson註解詳解

一、Jackson註解概述

Jackson是一個能夠非常方便地將Java對象轉換成JSON格式。它支持XML和JSON格式的數據處理,簡化了Java對象和JSON之間的轉換難度和代碼量。Jackson提供了很多註解來幫助Java開發者更好地控制對象序列化和反序列化過程。使用Jackson註解,可以在實現比較複雜的對象序列化和反序列化時更加高效靈活。下面就來具體介紹Jackson註解相關內容。

二、Jackson註解xml

Jackson註解可以將Java對象轉換為XML格式。 @JacksonXmlRootElement註解告訴Jackson將Java對象序列化為根元素。@JacksonXmlElementWrapper註解可以在Java對象的屬性上使用,設定出XML標籤名稱以及是否將屬性中的每個元素分別序列化成XML元素。

    @JacksonXmlRootElement(localName = "person")
    public class Person {
        @JacksonXmlProperty(localName = "fullName")
        public String name;

        @JacksonXmlProperty(localName = "age")
        public int age;
    }

三、jackson註解保留null值

Jackson的默認行為是忽略null值。這個默認行為可以通過添加如下注解來覆蓋:

    @JsonInclude(JsonInclude.Include.ALWAYS)
    public class Person {
        private String name;
        private int age;
    }

使用@JsonInclude註解,我們可以指定要不要在序列化的時候包括某些屬性。Include.NON_NULL告訴Jackson只包括那些不為null的屬性;Include.NON_EMPTY則是說只要不是null或””(空字元串),都會被包含。

四、jackson註解配置

Jackson的一些配置可以通過ObjectMapper類的一些方法來實現。比如說,我們可以通過ObjectMapper.setDefaultPropertyInclusion()方法來設定全局JsonInclude。另外,ObjectMapper還提供了一些其他的配置,比如indentOutput(),用來在序列化結果中縮進元素。

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
    mapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_EMPTY);

五、jackson註解大全

Jackson提供了大量的註解來控制Java對象的序列化和反序列化。下面列出幾個比較常用的註解:

  • @JsonIgnore – 忽略屬性
  • @JsonProperty – 重命名屬性
  • @JsonRootName – 設定根元素名稱
  • @JsonUnwrapped – 取消嵌套序列化
  • @JsonCreator – 指定反序列化構造函數
  • @JsonSetter/@JsonGetter – 指定setter和getter方法名

六、jackson註解詳解

在這裡,我們來詳細介紹一下Jackson註解的具體細節。

1. @JsonIgnore

@JsonIgnore註解可以用於屬性,方法或構造函數參數上,用來忽略不需要序列化或反序列化的屬性或參數。例如:

    public class Person {
        private String name;

        @JsonIgnore
        private String password;
    }

2. @JsonProperty

@JsonProperty註解可以用在屬性和setter方法上,用來為屬性指定一個不同於屬性名的JSON欄位名。

    public class Person {
        @JsonProperty("person_name")
        private String name;
    }

3. @JsonRootName

@JsonRootName註解可以用於類上,用來設定根元素的名稱。

    @JsonRootName("person")
    public class Person {
        private String name;
    }

4. @JsonUnwrapped

@JsonUnwrapped註解可以用在嵌套的對象上,取消嵌套序列化。

    public class Address {
        private String city;
        private String street;
    }

    public class Person {
        private String name;

        @JsonUnwrapped
        private Address address;
    }

5. @JsonCreator

@JsonCreator註解可以用在構造函數上,用來告訴Jackson如何反序列化一個對象。它會標識一個構造函數,由Jackson用來序列化JSON字元串。

    public class Person {
        private String name;
        private int age;

        @JsonCreator
        public Person(@JsonProperty("name") String name, @JsonProperty("age") int age) {
            this.name = name;
            this.age = age;
        }
    }

6. @JsonSetter/@JsonGetter

@JsonSetter和@JsonGetter註解可以用在setter和getter方法上,用來指定getter和setter方法的名稱。

    public class Person {
        private String name;
        private int age;

        @JsonGetter("person_name")
        public String getName() {
            return name;
        }

        @JsonSetter("person_name")
        public void setName(String name) {
            this.name = name;
        }
    }

七、jackson註解 不返回null

Jackson默認的行為是不返回null的屬性。如果需要返回null值,可以通過如下注解實現:

    @JsonInclude(JsonInclude.Include.ALWAYS)
    public class Person {
        private String name;
        private Integer age;
    }

八、jackson註解解析json

下面的示例展現了如何在Java中解析JSON字元串。

    ObjectMapper mapper = new ObjectMapper();
    String json = "{ \"name\" : \"Tom\", \"age\" : 28 }";
    Person person = mapper.readValue(json, Person.class);

九、jackson常用註解

下面是Jackson中比較常用的註解:

  • @JsonIgnore – 忽略屬性。
  • @JsonProperty – 重命名屬性。
  • @JsonFormat – 設定日期格式。
  • @JsonRootName – 設定根元素名稱。
  • @JsonUnwrapped – 取消嵌套序列化。
  • @JsonCreator – 指定反序列化構造函數。
  • @JsonSetter/@JsonGetter – 指定setter和getter方法名。
  • @JsonTypeInfo/@JsonSubTypes – 指定多態類型。

十、jackson自定義註解

Java開發者可以根據需要自己創建Jackson註解,只需要將Java類型標識為註解類型,並編寫相應的處理代碼即可。

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Age {
        int value() default 18;
    }

    public class Person {
        @Age(19)
        private int age;
    }

    public class AgeDeserializer extends StdDeserializer {
        @Override
        public Age deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
            JsonNode node = jp.getCodec().readTree(jp);
            int ageValue = node.get("age").intValue();
            return new Age(ageValue);
        }
    }

在這個示例中,我們新建了一個Age註解,指定了默認值為18。在Person類的age屬性上加上了@Age(19)註解,並編寫了一個AgeDeserializer,指定了自定義的註解如何進行反序列化。

原創文章,作者:MXPGO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370756.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MXPGO的頭像MXPGO
上一篇 2025-04-22 01:14
下一篇 2025-04-22 01:14

相關推薦

  • Hibernate註解聯合主鍵 如何使用

    解答:Hibernate的註解方式可以用來定義聯合主鍵,使用@Embeddable和@EmbeddedId註解。 一、@Embeddable和@EmbeddedId註解 在Hibe…

    編程 2025-04-29
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論