如果杰克逊在序列化过程中忽略某个字段的值是否为空,该如何告诉他?
如果杰克逊可以配置为在序列化期间忽略字段值(如果该字段的值为空)。
例如:
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;
}
或者,您可以在getter中使用@JsonInclude
,以便如果该值不为null,则会显示该属性。
一个更完整的例子可以在我如何防止一个Map中的空值和一个bean中的空字段通过Jackson序列化的答案中得到。
随着杰克逊> 1.9.11和<2.x使用@JsonSerialize
注释来做到这一点:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
只是为了扩展其他答案 - 如果您需要在每个字段的基础上控制空值的省略,请注释有问题的字段(或者注释字段的“getter”)。
例如 -这里只有fieldOne
会从json中省略,如果它为null的话。 fieldTwo
将始终包含在内,无论它是否为null。
public class Foo {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String fieldOne;
private String fieldTwo;
}
要省略类中的所有空值作为默认值,请注释该类。 如果有必要,每场/ getter注释仍可用于覆盖此默认值。
例如 -这里fieldOne
和fieldTwo
将分别从null中删除,因为这是由类注释设置的默认值。 fieldThree
会覆盖默认值,并且将始终包含在内,因为该字段上有注释。
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {
private String fieldOne;
private String fieldTwo;
@JsonInclude(JsonInclude.Include.ALWAYS)
private String fieldThree;
}
更新使用杰克逊2 - 为早期版本的杰克逊使用
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
代替
@JsonInclude(JsonInclude.Include.NON_NULL)
如果此更新有用,请在下面提出ZiglioUK的答案,它在此更新之前很久就指出了此新注释!
链接地址: http://www.djcxy.com/p/37867.html上一篇: How to tell Jackson to ignore a field during serialization if its value is null?
下一篇: Jackson with JSON: Unrecognized field, not marked as ignorable