【问题标题】:Jackson: how to include null value property in JSON serializationJackson:如何在 JSON 序列化中包含空值属性
【发布时间】:2019-06-08 09:19:09
【问题描述】:

我正在尝试使用我自己的 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
}

【问题讨论】:

  • 你在哪里添加了@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS)
  • 我将它添加到响应实体的错误属性中。

标签: java null jackson response


【解决方案1】:

JsonInclude添加到相关类ResponseData

(使用@ThomasFritsch 评论更新)

@JsonInclude(JsonInclude.Include.ALWAYS)

表示始终包含属性的值,与属性的值无关。

【讨论】:

  • 并将其也添加到Data
  • 我只能使用@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS) 并且它不起作用。
  • 在 Jackson 2.11.0 版本中也无法正常工作
【解决方案2】:

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

@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS)

然后我使用了以下内容:

@XmlElement(nillable = true)

错误和名称属性的注释并且它有效。现在我得到了正确的 JSON 响应。

错误属性解决方法:

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

【讨论】:

  • 我怎样才能对 HashMap 做同样的事情?
猜你喜欢
  • 2012-08-19
  • 1970-01-01
  • 2014-12-17
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多