jackson 未反映对象Map器的setSerializationInclusion(JsonInclude.Include.NON_NULL)设置[重复]

vxf3dgd4  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(181)

此问题在此处已有答案

Excluding NullNode when serializing a Jackson JSON tree model(3个答案)
8个月前关门了。
ObjectMapper仍然包含空值。我尝试了很多解决方案,但是没有任何效果。我不能使用json注解,所以我唯一的解决方案是预定义的Map器设置,但是这没有反映出来。我认为这是由于objectMapper的缓存。但是我对Map器的唯一修改是在构造函数中进行的。所以缓存不会是一个问题
相关性:

Log4J2: 2.17.1
Fasterxml Jackson annotation: 2.13.2
Fasterxml Jackson databind: 2.13.2
Wildfly: 20.0.1
OpenJDK: 11.0.14.1

我有一个objectMapper定义为全局值,它在构造函数中被示例化。然后我有一个方法来构建一个JSON,它接受键和值。因为值可以是任何东西。

private final ObjectMapper jsonMapper;

public SomeConstructor() {
    this.jsonMapper = new ObjectMapper();
    this.jsonMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    this.jsonMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
}

@Override
public void setJsonVar(String jsonVar, String jsonKey, Object values) {

    // loads ObjectNode from memory if exists
    ObjectNode jsonNode = getJsonVar(jsonVar);

    // lazy init if ObjectNode not exists
    if (jsonNode == null) {
        jsonNode = jsonMapper.createObjectNode();
    }
    // add object
    jsonNode.putPOJO(jsonKey, values);
}

用法:

setJsonVar("var-A", "key-A", 1);
setJsonVar("var-A", "key-B", null);
print("var-a");

期望值:
我想避免JSON中的空值。
预期值:var-A: { "key-A":1 },获得值:var-A: { "key-A":1, "key-B":null }
为什么会发生这种情况?我可以做些什么来解决这个问题?

xoefb8l8

xoefb8l81#

这个选项在序列化对象、自定义对象或Map时适用,但在处理json树时**不 * a适用。请考虑这个Foo类:

public class Foo {

    private String id;
    private String name;

    //getters and setters
}

排除空值的选项将按预期方式使用它。
主要方法来说明它:

public class Main {

    public static void main(String[] args) throws Exception {
        serializeNulls();
        System.out.println();
        doNotSerializeNulls();
    }

    private static void serializeNulls() throws Exception {
        ObjectMapper jsonMapper = new ObjectMapper();
        Foo foo = new Foo();
        foo.setId("id");
        System.out.println("Serialize nulls");
        System.out.println(jsonMapper.writeValueAsString(foo));

        Map<String, Object> map = new LinkedHashMap<>();
        map.put("key1", "val1");
        map.put("key2", null);
        System.out.println(jsonMapper.writeValueAsString(map));
    }

    private static void doNotSerializeNulls() throws Exception {
        ObjectMapper jsonMapper = new ObjectMapper();
        jsonMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        jsonMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);

        Foo foo = new Foo();
        foo.setId("id");
        System.out.println("Do not serialize nulls");
        System.out.println(jsonMapper.writeValueAsString(foo));

        Map<String, Object> map = new LinkedHashMap<>();
        map.put("key1", "val1");
        map.put("key2", null);
        System.out.println(jsonMapper.writeValueAsString(map));
    }
}

相关问题