我想在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名称应该相同。当我编译这个我得到错误。如何为两者设置相同的名称。?
答案 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);