如果该字段的值为 null,如何配置 Jackson 在序列化过程中忽略该字段的值。
例如:
public class SomeClass {
// what jackson annotation causes jackson to skip over this value if it is null but will
// serialize it otherwise
private String someValue;
}
要使用 Jackson> 2.0 抑制具有空值的序列化属性,可以直接配置ObjectMapper
,或使用@JsonInclude
批注:
mapper.setSerializationInclusion(Include.NON_NULL);
或者:
@JsonInclude(Include.NON_NULL)
class Foo
{
String bar;
}
另外,您可以@JsonInclude
,以便在值不为 null 时显示属性。
我对如何防止 Map 内的空值和 Bean 内的空字段无法通过 Jackson 序列化的回答提供了一个更完整的示例。
对于 Jackson> 1.9.11 和 < 2.x,请使用@JsonSerialize
注释执行此操作:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
只是为了扩展其他答案 - 如果您需要在每个字段的基础上控制空值的省略,请为有问题的字段添加注释(或为字段的 “getter” 添加注释)。
示例 -如果此处为 null,则从 json 中仅fieldOne
无论是否为 null,都会始终包含fieldTwo
public class Foo {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String fieldOne;
private String fieldTwo;
}
要忽略该类中的所有空值作为默认值,请为该类添加注释。如有必要,仍可以使用按字段 / 获取器的注释来覆盖此默认值。
示例 - fieldOne
和fieldTwo
分别为 null,则它们将从 json 中省略,因为这是类注释的默认设置。 fieldThree
将覆盖默认值并始终包含在内。
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {
private String fieldOne;
private String fieldTwo;
@JsonInclude(JsonInclude.Include.ALWAYS)
private String fieldThree;
}
更新
以上是针对Jackson 2 的。对于早期版本的 Jackson,您需要使用:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
代替
@JsonInclude(JsonInclude.Include.NON_NULL)
如果此更新有用,请在下面更新 ZiglioUK 的答案,它指出了较新的 Jackson 2 批注,而我要更新它的答案才能使用它!