首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

jackson JsonInclude Non_Null不会忽略对嵌套对象属性的处理

Jackson是一个用于Java的流行的JSON处理库,它提供了一系列的注解和API,用于在Java对象和JSON之间进行转换。其中,JsonInclude注解是Jackson库中的一个注解,用于控制在将Java对象转换为JSON时,如何处理对象中的属性。

JsonInclude注解有一个属性value,用于指定在转换过程中如何处理属性。其中,JsonInclude.Include是一个枚举类,定义了以下几个取值:

  1. ALWAYS:始终包含属性,即使属性值为null。
  2. NON_NULL:仅包含非null的属性。
  3. NON_DEFAULT:仅包含与默认值不同的属性。
  4. NON_EMPTY:仅包含非空的属性。
  5. CUSTOM:使用自定义的过滤器来决定包含哪些属性。

对于JsonInclude.Include.NON_NULL,它表示在转换过程中,只有非null的属性才会被包含在生成的JSON中,null值的属性将被忽略。

对于嵌套对象属性的处理,JsonInclude.Include.NON_NULL注解将递归地应用于嵌套对象的属性。也就是说,如果一个对象的属性是一个嵌套对象,并且该属性上使用了JsonInclude.Include.NON_NULL注解,那么在转换过程中,只有嵌套对象中非null的属性才会被包含在生成的JSON中,null值的属性将被忽略。

下面是一个示例代码,演示了如何在Java对象中使用JsonInclude.Include.NON_NULL注解:

代码语言:txt
复制
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Person {
    private String name;
    private Integer age;
    private Address address;

    // getters and setters
}

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Address {
    private String city;
    private String country;

    // getters and setters
}

public class Main {
    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();

        Person person = new Person();
        person.setName("John");
        person.setAge(30);

        Address address = new Address();
        address.setCity("New York");
        // address.setCountry(null); // 如果设置为null,则该属性将被忽略

        person.setAddress(address);

        String json = objectMapper.writeValueAsString(person);
        System.out.println(json);
    }
}

在上面的示例中,Person类和Address类上都使用了@JsonInclude(JsonInclude.Include.NON_NULL)注解,表示只有非null的属性才会被包含在生成的JSON中。在Main类中,我们创建了一个Person对象,并设置了nameageaddress属性。其中,address属性是一个嵌套对象,它的country属性被设置为null。在转换为JSON时,country属性将被忽略,生成的JSON只包含nameageaddress.city属性。

腾讯云提供了一系列的云计算相关产品,其中包括对象存储、云服务器、云数据库等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方文档或咨询腾讯云的客服人员。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

jackson学习之五:JsonInclude注解

学习之二:jackson-core jackson学习之三:常用API操作 jackson学习之四:WRAP_ROOT_VALUE(root对象jackson学习之五:JsonInclude注解 jackson...JsonInclude注解,是因为该注解值有多种,每种都有不同效果,最好学习方法就是编码实战; 先注解所有取值做个简介: ALWAYS // 默认策略,任何情况都执行序列化 NON_NULL /...NON_DEFAULT // 如果字段是默认值,就不会被序列化 CUSTOM // 此时要指定valueFilter属性,该属性对应一个类,用来自定义判断被JsonInclude修饰字段是否序列化...: NON_NULL NON_NULL好理解,就是值为null就不序列化: NON_ABSENT NON_ABSENT略为复杂,当实例化对象有Optional或AtomicReference...> 其次是代码中执行以下设置: mapper.registerModule(new Jdk8Module()); 咱们先看看设置成NON_NULLjacksonOptional和AtomicReference

88920

jackson学习之六:常用类注解

实例; 关于root对象序列化和反序列化特性,可以参考《jackson学习之四:WRAP_ROOT_VALUE(root对象)》; JsonIgnoreProperties 该注解用于指定序列化和反序列化时要忽略字段...注解JsonInclude仅在序列化场景有效; 通过该注解控制某些字段不被序列化(例如空字符串不被序列化); 可以设置以下几种限制: ALWAYS // 默认策略,任何情况都执行序列化 NON_NULL...NON_DEFAULT // 如果字段是默认值,就不会被序列化 CUSTOM // 此时要指定valueFilter属性,该属性对应一个类,用来自定义判断被JsonInclude修饰字段是否序列化...USE_DEFAULTS // 当JsonInclude在类和属性上都有时,优先使用属性注解,此时如果在序列化get方法上使用了JsonInclude,并设置为USE_DEFAULTS,就会使用类注解设置...JsonInclude涉及知识点较多,已在一篇单独文章中详细说明,请参考《jackson学习之五:JsonInclude注解》; 至此,Jackson常用类注解学习和实战就完成了,接下来文章

29620

Jackson 使用

jackson-annotations 又依赖于 jackson-core, Jackson有三种方式处理 json: 使用底层基于 Stream 方式Json每一个小组成部分进行控制 使用...Tree Model,通过JsonNode处理单个Json节点 使用 databind 模块,直接Java对象进行序列化和反序列化 通常来说,我们在日常开发中使用是第3种方式,有时为了简便也会使用第...或者在class上面加上@JsonIgnoreProperties(ignoreUnknown = true)注解 Jackson除了处理普通对象,还可以对Java集合、数组等进行序列化处理。...@JsonIgnore 注解 注解用于排除某个属性,这样该属性不会Jackson序列化和反序列化。...)和@JsonInclude(JsonInclude.Include.NON_NULL),因为这样序列化之后数据无法展现出数据schema,客户端不友好。

1.7K20

jackson序列化和反序列化中注解和扩展点大全【收藏】

库将嵌套对象属性合并到外层对象中,从而在生成 JSON 数据中直接包含嵌套对象属性。...这样可以让 JSON 数据中扁平结构直接映射到外层对象属性上,简化了处理嵌套结构代码逻辑。...7.2 属性级别的 @JsonInclude 注解 当应用在属性级别上时,@JsonInclude 注解可以覆盖类级别的默认 null 处理策略,为该属性指定独立 null 处理策略。...通过设置 @JsonInclude value 属性,可以指定序列化过程中该属性 null 处理策略,取值与类级别的注解相同。...这意味着被 @JsonIgnoreType 注解类型将会被完全忽略不会被包含在最终生成 JSON 中,也不会被用于反序列化。

75210

都是微服务天下了,还有不知道 JSON 程序员吗?

serialzeFeatures fastjson 默认序列化规则是当字段值为 null 时候,是不会序列化这个字段 1.3.2 Jackson   Jackson 是当前用比较广泛,用来序列化和反序列化...@JsonIgnore 作用在属性或方法,用来告诉 Jackson处理忽略该注解标注 java pojo 属性 @JsonIgnoreProperties 作用在类,@JsonIgnoreProperties...和 @JsonIgnore作用相同,都是告诉 Jackson忽略哪些属性,不同之处是 @JsonIgnoreProperties 是类级别的,并且可以同时指定多个属性 @JsonIgnoreType...标注在类上,当其他类引用该类时,该属性将被忽略 @JsonInclude JsonInclude.Include.NON_EMPTY:属性为空或者 null 都不参与序列化。...JsonInclude.Include.NON_NULL:属性为 null 不参与序列化 @JsonProperty 属性使用注解,用来表示外部属性名字,就是使用别名序列化,而不是对象名字。

4.4K20

序列化与反序列化核心用法-JSON框架Jackson精解第一篇

Jackson是Spring Boot默认JSON数据处理框架,但是其并不依赖于任何Spring 库。有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制。...它提供了很多JSON数据处理方法、注解,也包括流式API、树模型、数据绑定,以及复杂数据类型转换等功能。...null字段序列化@JsonInclude 当我们不为对象成员变量赋值时候,默认情况下,Jackson序列化结果是下面的这样。...六、忽略指定字段 默认情况下,jackson不会将static和transient成员变量进行序列化与反序列化操作。...举例:如果JSON字符串包含了类中被JsonIgnore属性值hobbies,不会被反序列化赋值给java对象成员变量hobbies。 喜欢 (0)or分享 (0)

3K33

重学springboot系列之JSON处理工具类

-- FastJSON、Gson和Jackson对比 开源Jackson:SpringBoot默认是使用Jackson作为JSON数据格式处理类库,Jackson在各方面都比较优秀,所以不建议将Jackson...GoogleGson:Gson是Google为满足内部需求开发JSON数据处理类库,其核心结构非常简单,toJson与fromJson两个转换函数实现对象与JSON数据转换, 阿里巴巴FastJson...反序列化:在客户端将请求数据上传到服务端时候,自动处理JSON数据对象字符串、数字,将其转换为包含Date类型、Integer等类型对象。...,但实体类不存在属性,不予赋值,也不会出现异常。...这样移动端会更省流量 // Include.NON_NULL 属性为NULL 不序列化 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY

2.2K10

中篇|Jackson注解用法和场景,建议收藏

前言 今天我们接着上一篇文章梳理Jackson注解。 Jackson注解一览 @JsonFormat 用于序列化和反序列化中特定格式数据。...@JsonIdentityInfo 这个作用于类或属性上,被用来在序列化/反序列化时为该对象或字段添加一个对象识别码,比如@id或者Class对象名,主要解决字段循环嵌套问题,例如数据库中多关系...@JsonIgnore 这个也是常用一个注解。在序列化/反序列化时忽略被该注解标记属性。这个注解和前面介绍@JsonFilter提供功能差不多。不过该注解是静态标记。...主要用来一些数据敏感对象进行忽略,比如用户凭据。...用来标记属性或者属性getter和setter方法上,用于指定属性json名称,类似@JsonAlias效果,同时配合其Access枚举可以实现那些属性可以序列化,那些属性可以反序列化(类似忽略效果

1.6K30

Jackson 常用注解

,在序列化、反序列化时可以为该对象或字段添加一个对象识别码,比如 @id 或者 Class 对象名,主要用于解决字段循环嵌套问题。...,在序列化、反序列化时会忽略被该注解标记属性。...,作用在类上,引用这个类其他对象在序列化、反序列化时会忽略这个类,主要用来一些数据敏感对象进行忽略。...@JsonInclude 注解用于标识对象属性何时可以被序列化,可以把该注解标记在属性字段上,也可以通过 ObjectMapper setSerializationInclusion 方法进行统一设置...如果没有该注解修饰则输出: { "name": "张三", "json": "{\"age\":\"25\"}" } @JsonUnwrapped @JsonUnwrapped 注解可以在序列化时把一个对象嵌套对象属性平铺展开

1.6K20

DTO到entity自动赋值

两个实体属性字段几乎完全相同 两个字体有部分字段相同 源实体只有部分字段赋值,目标实体有完整值 第一种情况 对于第1点来说,我们用到最多就是entity和dto之间转换了,这个我们可以使用Spring...我们可以使用jacksonObjectMapper import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper...= new ObjectMapper(); //配置该objectMapper在反序列化时,忽略目标对象没有的属性。...(source)); 我们总结一下objectMapper过滤参数: /* 通过该方法mapper对象进行设置,所有序列化对象都将按改规则进行系列化 Include.Include.ALWAYS...entity转换过程中出现 ,比如一个put操作,前端可能只修改某几个属性,而在后端处理时也只希望处理这几个被赋值属性,这时我们使用下面的方法: @RequestMapping(value =

1.4K30

jackson中@JsonProperty、@JsonIgnore等常用注解总结

属性名称重命名,比如在很多场景下Java对象属性是按照规范驼峰书写,但在数据库设计时使用是下划线连接方式,此处在进行映射时候就可以使用该注解。...(最好是属性上),用来完全忽略被注解字段和方法对应属性,即便这个字段或方法可以被自动检测到或者还有其 他注解,一般标记在属性或者方法上,返回json数据即不包含该属性。...使用情景:需要把一个List转换成json格式数据传递给前台。但实体类中基本属性字段值都存储在快照属性字段中。此时我可以在业务层中做处理,把快照属性字段值赋给实体类中对应基本属性字段。...最后,我希望返回json数据中不包含这两个快照字段,那么在实体类中快照属性上加注解@JsonIgnore,那么最后返回json数据,将不会包含customerId和productId两个属性值。...@JsonInclude :属性值为null不参与序列化。例子:@JsonInclude(Include.NON_NULL)

1.9K30
领券