Jackson忽略空字段

作者: 攻城狮susht | 来源:发表于2020-04-27 21:35 被阅读0次

    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值。

    相关文章

      网友评论

        本文标题:Jackson忽略空字段

        本文链接:https://www.haomeiwen.com/subject/tdkpwhtx.html