有没有办法使用 Jackson 包含带有空值的嵌套 Map

问题描述 投票:0回答:1

我有一个用于 ObjectMapper 的 spring bean,它有一个配置:

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
我上课时里面有地图:

@Getter
@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class MyClass {
    private Map<String, Object> value = new HashMap<>();
}

地图看起来像:

{
  "value" : {
    "a": null,
    "b": "notnull",
    "c" : [ {
      "c1" : null
    }, {
      "c2" : "abc"
    } ]
  }
}

当我调用休息端点时,响应如下所示:

"value": {
          "b": "notnull",
          "c": [
            {},
            {
              "c2": "abc"
            }
          ]
        }
      }

我尝试更新特定于我的班级的配置:

JsonInclude.Include nonDefaultInclude = JsonInclude.Include.ALWAYS;
    JsonInclude.Value includeValue = JsonInclude.Value.construct(nonDefaultInclude, nonDefaultInclude);
    mapper.configOverride(MyClass.class).setIncludeAsProperty(includeValue);

但它不起作用,无论它是否有效,如果我这样做:

JsonInclude.Include nonDefaultInclude = JsonInclude.Include.ALWAYS;
    JsonInclude.Value includeValue = JsonInclude.Value.construct(nonDefaultInclude, nonDefaultInclude);
    mapper.configOverride(Map.class).setIncludeAsProperty(includeValue);

我也尝试使用第一种方法并将@JsonIninclude放在里面的地图上 - 没有运气

如果我使用第二种方法,那么我将覆盖项目中的所有地图 - 没办法做到这一点。

有什么方法可以实现我的目标吗?

spring-boot jackson jackson-databind jackson2
1个回答
0
投票

您可以从

application.properties
文件控制 Jackson ObjectMapper 的行为。要始终包含字段,无论其值如何,请设置以下配置值:

spring.jackson.default-property-inclusion=always

文档:自定义 Jackson ObjectMapper

© www.soinside.com 2019 - 2024. All rights reserved.