簡短的回答:
@JsonIgnoreProperties(ignoreUnknown=true)
適用於JSON的反序列化到只有Java對象(POJO
)。如果POJO不包含JSON包含的某些屬性,則它們將被忽略,並且不會引發錯誤。
在另一方面@JsonInclude(Include.NON_EMPTY)
用於在POJO的序列化JSON和它說,跳過是POJO屬性:
空或者什麼被認爲是空的不包括在內。 的定義空值是特定於數據類型的。
龍答:
@JsonInclude
是唯一的序列化時使用。它表示,如果某個屬性(或所有屬性)的值等於某個值(null
,empty
- 無論這意味着什麼,或默認值),則該屬性不會被序列化。
沒有這個註解屬性值總是被序列化。註釋有助於減少傳送屬性的數量(屬性默認值必須在接收端不存在時指定)。
實施例:
public class Person {
public String firstName = "Mark";
public String middleName;
public String lastName = "Watney";
}
ObjectMapper mapper = new ObjectMapper();
Person p = new Person();
System.out.println(mapper.writeValueAsString(p));
會產生以下輸出:
{"firstName":"Mark","middleName":null,"lastName":"Watney"}
但如果Person
與@JsonInclude(Include.NON_EMPTY)
註釋,中間名從輸出省略,因爲它的值是在該 「空」(null
情況):
@JsonInclude(Include.NON_EMPTY)
public static class Person {
[....]
}
控制檯輸出是:{"firstName":"Mark","lastName":"Watney"}
@JsonIgnoreProperties
是用來忽略串行化和反串行化的某些性質而不管其值:
,以防止指定字段從被序列化或反序列化(即不包含在JSON輸出中;或者被設置,即使它們包括):@JsonIgnoreProperties({ "internalId", "secretKey" })
要忽略JSON輸入任何未知屬性無一例外:@JsonIgnoreProperties(ignoreUnknown=true)
如果JSON輸入:
{
"firstName": "Homer",
"middleName": "Jay",
"lastName": "Simpson"
}
和類是:
public class Person {
public String firstName;
public String lastName;
}
反序列化mapper.readValue(json, Person.class)
會產生UnrecognizedPropertyException
例外:在線程 「主要」 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
例外: 無法識別領域的 「中間名」 .....
因爲財產middleName
不部分Person
類。
但是,如果類Person
註釋了@JsonIgnoreProperties(ignoreUnknown=true)
,則在向POJO反序列化時,未知屬性(如middleName
)將被忽略。
@JsonIgnoreProperties(ignoreUnknown=true)
public class person {
[...]
}
另一種常見的情況是抑制敏感性質的系列化,例如像密碼:
@JsonIgnoreProperties("password")
public static class User {
public String login = "simpsonh";
public String password = "D00nut";
public String firstName = "Homer";
public String middleName = "Jay";
public String lastName = "Simpson";
}
現在,如果你序列User類,密碼將在輸出時被省略:
User u = new User();
System.out.println(mapper.writeValueAsString(u));
控制檯輸出: {"login":"simpsonh","firstName":"Homer","middleName":"Jay","lastName":"Simpson"}
Awesome answ呃,謝謝你這麼徹底! – discodude
歡迎您:)! –