来源:自学PHP网 时间:2020-10-09 10:30 作者:小飞侠 阅读:次
[导读] springboot项目中jackson-序列化-处理 NULL教程...
今天带来springboot项目中jackson-序列化-处理 NULL教程教程详解
在项目中有事需要对值为NULL的对象中Field不做序列化输入配置方式如下: [配置类型]: 源码包中的枚举类: public static enum Include { ALWAYS, NON_NULL, NON_ABSENT, NON_EMPTY, NON_DEFAULT, USE_DEFAULTS; private Include() { } } Include.Include.ALWAYS 默认 Include.NON_DEFAULT 属性为默认值不序列化 Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化 Include.NON_NULL 属性为NULL 不序列化 方式一:全局配置,处理所有整个应用的实体对象 #对日期类型的转换配置 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss # 配置 参数如下 always non_absent non_default non_empty non_null use_defaults spring.jackson.default-property-inclusion=non_null 方式二:在需要序列的话的实体类上加注解 ->[配置类型]所列
方式三:配置类型 3.1自定义序列化实现类,可以作用在类上 自定义json序列化需要实现StdSerializer @JsonSerialize(using = ClientObjectSerialize.class) public class CreditBorrowerRepaymentRequestDto{ } 实现类:对字段类型转换,以及对值为null字段的过滤 public class ClientObjectSerialize extends JsonSerializer 3.2自定义序列化实现类,可以作用在实体对象字段上,对NULL值的处理,或者转换 @JsonSerialize(using = ClientStringSerialize.class) private String name; @JsonSerialize(using = ClientDtaeSerialize.class) private Date date; public class ClientStringSerialize extends JsonSerializer 实践总结: 一当全局配置了NULL字段过滤的配置,但有的实体对象需要序列化出NULL的字段值,如何处理? 答: 1. 直接在对象上增加 @JsonInclude(JsonInclude.Include.ALWAYS) 类上的注解优先级比较高,会覆盖全局的配置 2.用自定义的类序列化注解(同上) 二直接在字段上加自定义序列化类会覆盖全局配置吗? 答:不会,有默认的 public class NullSerializer extends StdSerializer 补充知识:SpringBoot中Jackson返回null处理,字符串类型转空串,数组集合转[],对象转{} SpringBoot返回Json数据中null值处理,将字符串类型null值转换为"",将集合数组类型null值转换为[],将原始数据类型null值转换为0,将布尔类型null值转换为false,将实体对象null值转换为{}。 1.自定义null值序列化处理器 import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; /** * 自定义null值序列化处理器 */ public class CustomizeNullJsonSerializer { /** * 处理数组集合类型的null值 */ public static class NullArrayJsonSerializer extends JsonSerializer 2.序列化程序修改器 import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.SerializationConfig; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; import java.util.Collection; import java.util.List; /** ** 此modifier主要做的事情为: * 1.当序列化类型为数组集合时,当值为null时,序列化成[] * 2.String类型值序列化为"" * **/ public class MyBeanSerializerModifier extends BeanSerializerModifier { @Override public List 3.配置Jackson实体 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; /** * 配置Jackson实体 */ @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); /** 为objectMapper注册一个带有SerializerModifier的Factory */ objectMapper.setSerializerFactory(objectMapper.getSerializerFactory() .withSerializerModifier(new MyBeanSerializerModifier())); SerializerProvider serializerProvider = objectMapper.getSerializerProvider(); serializerProvider.setNullValueSerializer(new CustomizeNullJsonSerializer .NullObjectJsonSerializer()); return objectMapper; } } 以上这篇springboot项目中jackson-序列化-处理 NULL教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持自学php网。 以上就是关于springboot项目中jackson-序列化-处理 NULL教程全部内容,感谢大家支持自学php网。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com