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
,因为这是默认行为