如果字段的值为空,那么如何将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配置为在序列化期间忽略该字段值。
例如:
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;
}
当前回答
试试这个-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class XYZ {
protected String field1;
protected String field2;
}
对于非空值(在getter/class级别)-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_EMPTY)
其他回答
只是为了扩展其他答案-如果您需要控制每个字段中空值的省略,请注释有问题的字段(或者注释字段的“getter”)。
示例-这里只有fieldOne如果为空,将从JSON中省略。fieldTwo将始终包含在JSON中,无论它是否为空。
public class Foo {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String fieldOne;
private String fieldTwo;
}
要忽略类中的所有空值作为默认值,请注释该类。如果需要,Per-field/getter注释仍然可以用于覆盖此默认值。
示例-如果fieldOne和fieldTwo分别为空,则它们将从JSON中省略,因为这是类注释的默认设置。然而,fieldThree将覆盖默认值,并将始终包含在内,因为字段上有注释。
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {
private String fieldOne;
private String fieldTwo;
@JsonInclude(JsonInclude.Include.ALWAYS)
private String fieldThree;
}
更新
以上是《杰克逊2》。对于早期版本的Jackson,您需要使用:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
而不是
@JsonInclude(JsonInclude.Include.NON_NULL)
如果这个更新有用,请在下面投票支持ZiglioUK的答案,它早在我更新答案使用它之前就指出了更新的Jackson 2注释!
这个问题我们有很多答案。这个答案在某些情况下可能有用如果要忽略空值,可以在类级别使用NOT_null。如下所示
@JsonInclude(Include.NON_NULL)
class Foo
{
String bar;
}
有时您可能需要忽略空值,例如您可能已经初始化了arrayList,但该列表中没有元素
@JsonInclude(Include.NON_EMPTY)
class Foo
{
String bar;
}
案例一
@JsonInclude(JsonInclude.Include.NON_NULL)
private String someString;
案例二
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private String someString;
如果someString为空,则在这两种情况下都将忽略它。如果someString为“”,则只能在第二种情况下忽略。
对于List=null或List.size()=0也是如此
在Jackson 2.x中,使用:
@JsonInclude(JsonInclude.Include.NON_NULL)
对于Jackson>1.9.11和<2.x,请使用@JsonSerialize注释来实现:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)