一、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-hant/n/370756.html