在jackson中,如果它们的值为null或未设置,我如何在运行时排除少数字段?

时间:2013-05-07 11:24:28

标签: json jackson

我想在Jackson中进行运行时排除。

在下面的示例中有三个变量

public class Field {

//------------------------- private variables ----------------------------
private A header;
private B values;
private C argvalues;

//------------------------- constructors ----------------------------------

public Field(A header, B values) {      
    this.header = header;
    this.values = values;
}
public Field(A header, C values) {      
    this.header = header;
    this.argvalues = values;
}

public Field() {

}
//--------------------- getter-setter -------------------------------------
public A getHeader() {
    return header;
}

public void setHeader(A header) {
    this.header = header;
}

public B getValues() {
    return values;
}

public void setValues(B values) {
    this.values = values;
}
public C getArgvalues() {
    return argvalues;
}

public void setArgvalues(C argvalues) {
    this.argvalues = argvalues;
}


    }

假设在运行时没有设置任何变量,我如何从json中排除它们。请帮忙。

< - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ---->

当我们在下面的例子中使用@JsonProperty时

public String getType() {

    return type;

}

@ JsonProperty("Json")

public void setType(String type) {

    this.type = type;

}


public List<TwoDArrayItem> getItems() {

    return items;

}


@ JsonProperty("Json")

public void setItems(List<TwoDArrayItem> items) {

    this.items = items;

}

在任何时候我都只会设置一个setter方法 但两者的JsonProperty名称应该相同。当我编译这个我得到错误。如何为两者设置相同的名称。?

1 个答案:

答案 0 :(得分:1)

要始终排除给定对象的空值,可以使用以下命令对其进行注释:

@JsonSerialize(include=Inclusion.NON_NULL) // Jackson 1.9 or lower
@JsonInclude(Include.NON_NULL)             // Jackson 2 or higher
public class Field {
    // ...
}

与排除整个对象的空值相反,您可以为特定字段排除它们:

public class Field {
    private A header;
    private B values;

    @JsonSerialize(include=Inclusion.NON_NULL) // Jackson 1.9 or lower
    @JsonInclude(Include.NON_NULL)             // Jackson 2 or higher
    private C argvalues;

    // ...
}

要动态排除给定会话的空值,请创建对象映射器并将其配置为排除空值。

final ObjectMapper mapper = new ObjectMapper()
    .setSerializationInclusion(Include.NON_NULL);