为了账号安全,请及时绑定邮箱和手机立即绑定

如果字段的值为NULL,如何告诉Jackson在序列化期间忽略它?

如果字段的值为NULL,如何告诉Jackson在序列化期间忽略它?

手掌心 2019-07-02 15:34:15
如果字段的值为NULL,如何告诉Jackson在序列化期间忽略它?如果字段的值为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; }
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

若要禁止使用Jackson>2.0使用空值序列化属性,可以配置ObjectMapper直接,或利用@JsonInclude注释:

mapper.setSerializationInclusion(Include.NON_NULL);

或:

@JsonInclude(Include.NON_NULL)class Foo{
  String bar;}

或者,你可以用@JsonInclude在getter中,如果该值不是NULL,则会显示该属性。

中提供了一个更完整的示例我的回答如何防止Map中的空值和bean中的空字段通过Jackson序列化


查看完整回答
1 反对 回复 2019-07-02
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

在Jackson>1.9.11和<2.x的情况下使用@JsonSerialize注释:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)


查看完整回答
反对 回复 2019-07-02
?
慕村9548890

TA贡献1884条经验 获得超4个赞

只是为了扩展其他答案-如果您需要在每个字段的基础上控制空值的省略,请对所讨论的字段进行注释(或者对字段的“getter”进行注释)。

例子-只在这里fieldOne如果它为NULL,将从json中删除。fieldTwo无论它是否为NULL,都将始终包括在内。

public class Foo {

    @JsonInclude(JsonInclude.Include.NON_NULL) 
    private String fieldOne;

    private String fieldTwo;}

若要省略类中作为默认值的所有空值,请对类进行注释。如果有必要,仍可以使用每个字段/getter注释覆盖此默认值。

例子-这里fieldOnefieldTwo如果它们分别为NULL,则将从json中删除,因为这是类注释设置的默认设置。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的下面的答案,它指出了较新的杰克逊2注释之前,我更新我的答案使用它!


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 1543 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信