杰克逊:如何在JSON序列化中包含空值属性

时间:2019-01-14 11:27:36

标签: java null jackson response

我正在尝试使用自己的Java实体类以及Jackson批注生成JSON响应。我的JSON响应中两个键值必须为null,但是如果将它们设置为null,它们将从JSON中消失。不幸的是,我仅限于Jackson版本1.9.13。

我已经尝试使用

将值设置为null
@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS)

我的回复实体:

public class Response {

@JsonProperty("data")
private Data data;

@JsonProperty("error")
private Error error;

public Data getData() {
    return data;
}

public void setData(PgSoftAuthData data) {
    this.data = data;
}

public Error getError() {
    return error;
}

public void setError(PgSoftError error) {
    this.error = error;
}
}

我正在尝试生成这样的响应:

Data data = new Data();
data.setName("Name");
data.setTime(null); // This key dissappear from JSON

Response responseSuccess = Response();
responseSuccess.setData(data);
responseSuccess.setError(null); // Error object disappear from JSON

我想得到以下答复:

{
    "data" : {
        "name" : "Name",
        "time" : null
    },
    "error" : null
}

2 个答案:

答案 0 :(得分:1)

谢谢您的回答! 正如我提到的,我仅限于Jackson 1.9.13,并且尝试了以下Jackson注释的多种组合,但未成功:

@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS)

然后我使用了以下内容:

@XmlElement(nillable = true)

关于错误和名称属性的注释,它可以工作。现在,我得到了正确的JSON响应。

错误属性解决方案:

@XmlElement(nillable = true)
@JsonProperty("error")
private Error error;

答案 1 :(得分:0)

JsonInclude添加到相关的类ResponseData

(使用@ThomasFritsch评论更新)

@JsonInclude(JsonInclude.Include.ALWAYS)
  

该值指示始终包含该属性,而与该属性的值无关。