有没有一种方法可以使用Jackson来包含具有空值的嵌套Map

gab6jxml  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(82)

我有一个ObjectMapper的spring bean,它有一个配置:mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);我有一个类,里面有一个map:

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

Map看起来像:

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

当我调用rest endpoint时,响应看起来像:

"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);

我还尝试使用第一种方法,并把@JsonInclude放在里面的Map上-没有运气
如果我将使用第二种方法,那么我将覆盖项目中的所有Map-没有办法做到这一点。
有什么方法可以达到我的目标吗?

7z5jn7bk

7z5jn7bk1#

您可以从application.properties文件控制JacksonObjectMapper行为。要始终包含字段,而不管其值如何,请设置以下配置值:

spring.jackson.default-property-inclusion=always

编辑:自定义Jackson对象Map器

相关问题