seo建站系统免费网站建设培训
news/
2025/10/8 8:43:16/
文章来源:
seo建站系统,免费网站建设培训,创建全国文明城市的意义,商丘给企业做网站的公司简介 JsonInclude是 Jackson 库#xff08;Java 中用于处理 JSON 数据的流行库#xff09;中的一个注解。它用于控制在序列化 Java 对象为 JSON 时#xff0c;哪些属性应该被包含在 JSON 输出中。这个注解提供了多种策略来决定属性的包含与否#xff0c;帮助减少不必要的数…简介 JsonInclude是 Jackson 库Java 中用于处理 JSON 数据的流行库中的一个注解。它用于控制在序列化 Java 对象为 JSON 时哪些属性应该被包含在 JSON 输出中。这个注解提供了多种策略来决定属性的包含与否帮助减少不必要的数据传输提高性能并且优化 JSON 数据的结构。
有几个默认策略 策略介绍
ALWAYS 这是默认的包含策略。在使用JsonInclude.Include.ALWAYS时无论 Java 对象中的属性值是什么状态都会将其包含在序列化后的 JSON 数据中。例如对于一个 POJOPlain Old Java Object类
import com.fasterxml.jackson.annotation.JsonInclude;
class MyObject {JsonInclude(JsonInclude.Include.ALWAYS)private String name;JsonInclude(JsonInclude.Include.ALWAYS)private Integer age;// 构造函数、getter和setter方法省略
}当你将MyObject的一个实例序列化为 JSON 时name和age这两个属性都会出现在 JSON 字符串中即使name为null或者age为null。比如如果name是null序列化后的 JSON 可能是{name:null,age:null}。
NON_NULL 采用JsonInclude.Include.NON_NULL策略时只有属性值不为null的属性才会被包含在序列化后的 JSON 数据中。例如
import com.fasterxml.jackson.annotation.JsonInclude;
class MyObject {JsonInclude(JsonInclude.Include.NON_NULL)private String name;JsonInclude(JsonInclude.Include.NON_NULL)private Integer age;// 构造函数、getter和setter方法省略
}如果name为null而age为10那么序列化后的 JSON 将是{age:10}。这种策略可以有效减少 JSON 数据的大小避免传输不必要的null值。 这个可以用于给前端返回对象时加在类上就可以去掉不需要的空属性这也就不用再新建类了可以复用已有类。
NON_ABSENT 这个策略在某些特定的场景下使用比如处理一些可能存在 “缺席” 概念的数据结构。不过在标准的 Jackson 使用中这个策略相对不太常见。它通常用于更复杂的对象层次结构中当一个子对象被认为是 “缺席” 而不是null时不包含该子对象相关的属性。
NON_EMPTY 对于JsonInclude.Include.NON_EMPTY当属性是集合类型如List、Set、Map等或者字符串类型时只有在集合不为空或者字符串长度大于 0 时该属性才会被包含在 JSON 数据中。例如
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.ArrayList;
import java.util.List;
class MyObject {JsonInclude(JsonInclude.Include.NON_EMPTY)private ListString hobbies;// 构造函数、getter和setter方法省略
}如果hobbies是一个空的ArrayList那么在序列化MyObject时hobbies属性不会出现在 JSON 数据中。但如果hobbies包含元素如[reading,swimming]则会包含在 JSON 中像{hobbies:[reading,swimming]}。
NON_DEFAULT 当使用JsonInclude.Include.NON_DEFAULT时只有属性值与默认值不同的属性才会被包含在 JSON 数据中。对于基本数据类型它们都有默认值如int默认值是 0boolean默认值是false等。例如
import com.fasterxml.jackson.annotation.JsonInclude;
class MyObject {JsonInclude(JsonInclude.Include.NON_DEFAULT)private int count;// 构造函数、getter和setter方法省略
}如果count的值为 0int的默认值序列化MyObject时count属性不会出现在 JSON 数据中。但如果count为5则会包含在 JSON 中如{count:5}。
CUSTOM JsonInclude.Include.CUSTOM允许你定义自己的包含规则。这通常需要实现自定义的过滤器或者使用 Jackson 提供的一些高级过滤机制。例如你可以创建一个自定义的ValueFilter来决定哪些属性应该被包含具体实现可能涉及实现接口并配置到ObjectMapper中这是一种比较灵活但相对复杂的方式用于处理特殊的序列化需求。
USE_DEFAULTS 这个策略主要用于在继承场景或者一些复杂的配置中恢复到默认的包含策略。它会按照 Jackson 库默认的方式来处理属性的包含通常在覆盖了一些全局设置后需要在某些特定情况下重新使用默认行为时使用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931273.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!