Java jackson Include.NOT_NULL字段不工作

Java jackson Include.NOT_NULL字段不工作,java,jackson,lombok,Java,Jackson,Lombok,使用JsonInclude(content=Include.NON_NULL)(或者实际上任何其他JsonInclude选项)似乎对对象的序列化没有影响。考虑这个测试: public class JsonTest { @Data @JsonInclude(content=Include.ALWAYS) static class TestObj { String fieldVisible = "a"; String fieldVisibleN

使用
JsonInclude(content=Include.NON_NULL)
(或者实际上任何其他
JsonInclude
选项)似乎对对象的序列化没有影响。考虑这个测试:

public class JsonTest {
    @Data
    @JsonInclude(content=Include.ALWAYS)
    static class TestObj {
        String fieldVisible = "a";
        String fieldVisibleNull = null;
        @JsonInclude(content=Include.NON_NULL)
        String fieldInvisible = null;
    }

    public static void main(String[] args) throws JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writerFor(TestObj.class).writeValueAsString(new TestObj());
        if (json.contains("fieldInvisible")) {
            System.err.println(json);
            throw new RuntimeException("null field written even though it shouldn't be");
        }
    }
}
结果是:

{"fieldVisible":"a","fieldVisibleNull":null,"fieldInvisible":null}
Exception in thread "main" java.lang.RuntimeException: null field written even though it shouldn't be
    at my.package.JsonTest.main(JsonTest.java:57)
我遗漏了什么?我不明白什么?

使用

@JsonInclude(Include.NON_NULL)
而不是

@JsonInclude(content=Include.NON_NULL)

工作。谢谢@Aaron。

根据我收集的信息,您应该使用注释的
属性,而不是其
内容
属性(这对
地图
很有帮助)。作为旁注,我将省略类中的
Include.ALWAYS
,因为这是默认行为