当前位置: 首页 > 知识库问答 >
问题:

Jackson——定义自定义bean的方法对于序列化是空的

邵宏达
2023-03-14

对于Jackson的序列化,定义自定义bean为空的正确方法是什么?

我想用Json过滤不需要的字段-

目前,如果属于自定义bean的所有变量都为null,我有一个额外的方法将null值分配给它。我在寻找的是,这是否可以由杰克逊来完成。

public class JsonFileContext {

    //...Some variables

    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @JsonView(Views.In.class)
    private ContentRecognize contentRecognize;

    //...getter/setter method
}

内容识别类

public class ContentRecognize {

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

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private RecognizePattern targetId;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private RecognizePattern msgId;

    //...getter/setter method
}

预期产量

{
    "var1":"var1Content",
    "var2":"var2Content"
}

{
    "var1":"var1Content",
    "var2":"var2Content",
    "contentRecognize":{
        "type":"typeContent"
    }
}

电流输出

{
    "var1":"var1Content",
    "var2":"var2Content",
    "contentRecognize":{}
}

{
    "var1":"var1Content",
    "var2":"var2Content",
    "contentRecognize":{
        "type":"typeContent"
    }
}

共有1个答案

张和颂
2023-03-14

您可以使用@JsonIgnoreProperties@JsonIgnore注释之一。

@JsonIgnoreProperties

用于忽略序列化和反序列化中的某些属性,而不考虑其值:

为了防止指定的字段被序列化或反序列化(即不包括在JSON输出中;或者即使它们被包括在内也被设置):@JsonIgnoreProperties({"interalId","秘书密钥"})

要毫无例外地忽略JSON输入中的任何未知属性:@JsonIgnoreProperties(ignoreUnknown=true)

@jsonIgnore

标记注释,指示基于内省的序列化和反序列化功能将忽略带注释的方法或字段。也就是说,它不应该被认为是“吸气剂”、“定位器”或“创造者”。

此外,从Jackson 1.9开始,如果这是与一个属性关联的唯一注释,也会导致整个属性被忽略:也就是说,如果setter有这个注释,而getter没有注释,getter也被有效忽略。不同的访问器仍然有可能使用不同的注释;因此,如果只忽略getter,其他访问器(setter或field)将需要显式注释来防止不正确的注释(通常是JsonProperty)。

在你的情况下,我会:

1:

@JsonIgnoreProperties({ "contentRecognize" })
public class JsonFileContext {
    [...]
}

2:

public class JsonFileContext {
    //...Some variables

    @JsonIgnore
    private ContentRecognize contentRecognize;

    //...getter/setter method
}

3:用@JsonIgnore

 类似资料:
  • 根据这个答案:https://stackoverflow.com/a/43342675/5810648 我编写了这样的序列化程序: 如果注释存在并且字段为,则Witch应该编写字符串“N/A”。但是方法仅对非空字段调用。 此外,我还尝试调用setNullValueSerializer: 有了这样的实施: 但没有结果。 如何以这种方式处理空字段? 使现代化 根据讨论:https://github.c

  • 问题内容: 我正在尝试创建将影响序列化值的自定义杰克逊注释。 含义: 现在序列化对象X(10)将导致: 我该如何实现? 问题答案: 结果:

  • 问题内容: 根据这个答案:http://codingdict.com/questions/137507 我写了这样的序列化器: 如果注释存在且字段为,则女巫应该写字符串“ N / A” 。但是仅对非空字段调用方法。 另外,我尝试致电: 通过这样的实现: 但是没有结果。 如何以这种方式处理空字段? 更新资料 根据讨论:https : //github.com/FasterXML/jackson- d

  • 我试图创建会影响序列化值的自定义jackson注释。 意思是: 现在序列化对象X(10)将导致: 我怎样才能做到这一点?

  • 我有下面的JSON,我正试图使用Jackson API反序列化它 我基本上需要一个附件类,它有一个AttachmentFile对象列表,如下所示: 如何使用自定义反序列化器实现这一点? 谢谢

  • 我想将包含另一个空值POJO的POJO序列化为JSON。 例如,给定: 连载之后,它看起来会是这样的 如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局适用于每个对象,而无需编写自定义代码。