如果杰克逊在序列化过程中忽略某个字段的值是否为空,该如何告诉他?

如果杰克逊可以配置为在序列化期间忽略字段值(如果该字段的值为空)。

例如:

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注释仍可用于覆盖此默认值。

例如 -这里fieldOnefieldTwo将分别从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