1.概述
本文将介绍如何设置Jackson,使其在序列化java类时忽略空字段。
更多Jackson文章-请转到Jackson的主要文章。
2.在类级别控制忽略空字段
Jackson允许在类级别控制忽略空字段:
@JsonInclude(Include.NON_NULL)
public class MyDto { ... }
3.在field 级别控制忽略空字段
public class MyDto {
@JsonInclude(Include.NON_NULL)
private String stringValue;
private int intValue;
// standard getters and setters
}
通过测试空值确实不是最终JSON输出的一部分:
@Test
public void givenNullsIgnoredOnClass_whenWritingObjectWithNullField_thenIgnored()
throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
MyDto dtoObject = new MyDto();
String dtoAsString = mapper.writeValueAsString(dtoObject);
assertThat(dtoAsString, containsString("intValue"));
assertThat(dtoAsString, not(containsString("stringValue")));
}
4.全局设置忽略空字段
Jackson还允许在ObjectMapper上全局配置忽略空字段:
mapper.setSerializationInclusion(Include.NON_NULL);
任何类的任何空字段序列化通过这个映射器将被忽略:
@Test
public void Globally_NullField_Ignored()
throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
MyDto dtoObject = new MyDto();
String dtoAsString = mapper.writeValueAsString(dtoObject);
assertThat(dtoAsString, containsString("intValue"));
assertThat(dtoAsString, containsString("booleanValue"));
assertThat(dtoAsString, not(containsString("stringValue")));
}
5.结论
忽略空字段是一种常见的Jackson配置,因为通常情况下,我们需要更好地控制JSON输出。本文介绍了如何对类进行此操作。但是,还有更高级的用法,比如在序列化映射时忽略null值。