简短的回答:
@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
欢迎您:)! –