杰克逊:忽略空白字段,除了那些对项目有强制要求的字段

时间:2016-07-14 09:05:45

标签: java json jackson

以下是一个POJO类(某个嵌套级别的类之一),其中一个对象,我使用Jackson序列化为JSON。

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Attribute {

    private String label;
    private String name;        // Mandatory
    private String description; // Mandatory
    private String type;        // Mandatory
    private Boolean hidden;
    private Boolean important;
    ...

使用@JsonInclude(JsonInclude.Include.NON_EMPTY)仅包含值不为null或为空的字段。问题是字段namedescriptiontype是必需的,即,即使它们是null或为空,它们也必须存在于生成的JSON中。提供这些字段后,我没有问题。但是当他们没有提供时,

而不是 -

"attributes" : [ 
    {
        "type" : "Text",
        "hidden" : false,
        "important" : false,
        ...

我想要这个 -

"attributes" : [ 
    {
        "name" : "",
        "description" : "",
        "type" : "Text",
        "hidden" : false,
        "important" : false,
        ...

在上述情况下,字段labelnamedescription为空。此外,"有"属性以形式 -

List<Attribute> attributes;

这就是为什么,上面的JSON就是这样。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

我认为来自@chrylis的建议正是您所寻求的。在字段级别使用@JsonInclude(默认值为JsonInclude.Include.ALWAYS)注释特定字段以覆盖类级别@JsonInclude(JsonInclude.Include.NON_EMPTY)的想法。以下是一个例子:

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public static class Attribute {

    private String label;
    @JsonInclude
    private String name;        // Mandatory
    @JsonInclude
    private String description; // Mandatory
    @JsonInclude
    private String type;        // Mandatory