日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

springboot項目中jackson-序列化-處理 NULL教程

瀏覽:34日期:2023-04-18 15:14:27

在項目中有事需要對值為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_defaultsspring.jackson.default-property-inclusion=non_null

方式二:在需要序列的話的實體類上加注解 ->[配置類型]所列

@JsonInclude(Include.NON_NULL)

方式三:配置類型

3.1自定義序列化實現類,可以作用在類上 自定義json序列化需要實現StdSerializer<T>或者JsonSerializer<T>

@JsonSerialize(using = ClientObjectSerialize.class)public class CreditBorrowerRepaymentRequestDto{}

實現類:對字段類型轉換,以及對值為null字段的過濾

public class ClientObjectSerialize extends JsonSerializer<CreditBorrowerRepaymentRequestDto>{ @Override public void serialize(CreditBorrowerRepaymentRequestDto dto, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeStartObject(); try { Field[] fields = dto.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); if(null == field.get(dto)){ continue; } jsonGenerator.writeFieldName(field.getName()); jsonGenerator.writeObject(field.get(dto)); } } catch (Exception e) { e.printStackTrace(); } jsonGenerator.writeEndObject(); }}

3.2自定義序列化實現類,可以作用在實體對象字段上,對NULL值的處理,或者轉換

@JsonSerialize(using = ClientStringSerialize.class)private String name; @JsonSerialize(using = ClientDtaeSerialize.class)private Date date;public class ClientStringSerialize extends JsonSerializer<String> { @Override public void serialize(String string, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { if(string == null){ jsonGenerator.writeString(string + '[NULL]'); }else{ jsonGenerator.writeString(string); } }}public class ClientDtaeSerialize extends JsonSerializer<Date> { @Override public void serialize(Date createDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').format(createDate)); }}

實踐總結:

一當全局配置了NULL字段過濾的配置,但有的實體對象需要序列化出NULL的字段值,如何處理?

答:

1. 直接在對象上增加 @JsonInclude(JsonInclude.Include.ALWAYS) 類上的注解優先級比較高,會覆蓋全局的配置

2.用自定義的類序列化注解(同上)

二直接在字段上加自定義序列化類會覆蓋全局配置嗎?

答:不會,有默認的 public class NullSerializer extends StdSerializer<Object> 來處理,當值不為Null的時候才會執行自定義字段上的序列化注解實現類

補充知識: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<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartArray(); jsonGenerator.writeEndArray(); } } /** * 處理字符串類型的null值 */ public static class NullStringJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(''); } } /** * 處理數值類型的null值 */ public static class NullNumberJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(0); } } /** * 處理boolean類型的null值 */ public static class NullBooleanJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeBoolean(false); } } /** * 處理實體對象類型的null值 */ public static class NullObjectJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartObject(); jsonGenerator.writeEndObject(); } }}

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;/** * <pre> * 此modifier主要做的事情為: * 1.當序列化類型為數組集合時,當值為null時,序列化成[] * 2.String類型值序列化為'' * * </pre> */public class MyBeanSerializerModifier extends BeanSerializerModifier { @Override public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) { // 循環所有的beanPropertyWriter for (int i = 0; i < beanProperties.size(); i++) { BeanPropertyWriter writer = beanProperties.get(i); // 判斷字段的類型,如果是數組或集合則注冊nullSerializer if (isArrayType(writer)) { // 給writer注冊一個自己的nullSerializer writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullArrayJsonSerializer()); } if (isStringType(writer)) { writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullStringJsonSerializer()); } } return beanProperties; } /** * 是否是數組 */ private boolean isArrayType(BeanPropertyWriter writer) { Class<?> clazz = writer.getType().getRawClass(); return clazz.isArray() || Collection.class.isAssignableFrom(clazz); } /** * 是否是String */ private boolean isStringType(BeanPropertyWriter writer) { Class<?> clazz = writer.getType().getRawClass(); return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz); } /** * 是否是數值類型 */ private boolean isNumberType(BeanPropertyWriter writer) { Class<?> clazz = writer.getType().getRawClass(); return Number.class.isAssignableFrom(clazz); } /** * 是否是boolean */ private boolean isBooleanType(BeanPropertyWriter writer) { Class<?> clazz = writer.getType().getRawClass(); return clazz.equals(Boolean.class); }}

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實體 */@Configurationpublic 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教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
色婷婷狠狠五月综合天色拍| 午夜欧美精品| 黑丝一区二区三区| 日韩av不卡一区二区| 欧美日韩伊人| 91av一区| 国产精品一级在线观看| 国产乱码精品一区二区亚洲| 国产欧美日韩亚洲一区二区三区| 国产精品分类| 电影91久久久| 成人久久一区| 欧美日韩精品一本二本三本| 久久国产高清| 婷婷精品在线观看| 国产伦精品一区二区三区千人斩 | 日韩欧美一区免费| 亚洲性图久久| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产调教一区二区三区| 免费在线亚洲欧美| 日本在线高清| 国产亚洲精品自拍| 91精品国产自产观看在线| 欧美交a欧美精品喷水| 嫩呦国产一区二区三区av| 日本欧美国产| 欧美午夜不卡| 97久久超碰| 岛国av在线播放| 红桃视频国产精品| 91精品国产自产精品男人的天堂| 麻豆精品在线观看| 久久人人精品| 日韩中文字幕一区二区三区| 日韩精品国产欧美| 国产 日韩 欧美 综合 一区| 欧美中文字幕一区二区| 一区二区亚洲视频| 久久久久久久久成人| 亚州av乱码久久精品蜜桃| 亚洲2区在线| 成午夜精品一区二区三区软件| 不卡av一区二区| 欧美三级第一页| 久久久久国产| 91国内精品| 欧美亚洲国产激情| 国产精品中文字幕制服诱惑| 久久九九精品| 亚洲毛片一区| 日韩国产一区二区三区| 免费国产自线拍一欧美视频| 麻豆91在线播放| 老司机久久99久久精品播放免费| 欧美激情福利| 1024精品久久久久久久久| 91亚洲无吗| 久久久久美女| 国产精品蜜月aⅴ在线| 国内精品99| 欧美精品中文字幕亚洲专区| 亚洲成人二区| 欧美欧美黄在线二区| 欧美va天堂在线| 麻豆精品视频在线| 免费在线视频一区| 日韩中文影院| 国产精品入口久久| 国产偷自视频区视频一区二区| 国产一区日韩| 另类国产ts人妖高潮视频| 精品国产亚洲一区二区三区大结局 | 国产精品婷婷| 精品国产精品久久一区免费式| 欧美日韩国产亚洲一区| 国产在线不卡一区二区三区| 视频一区国产视频| 亚洲成人国产| 国产精品综合| 久久国产精品99国产| 成人小电影网站| 欧美天堂一区| 欧美一级精品| 国产一区二区三区久久| 奇米777国产一区国产二区| 尤物在线精品| 日韩电影免费网址| 精品一区视频| 国产精品一国产精品k频道56| 久热综合在线亚洲精品| 99久久精品费精品国产| 国产一区二区三区四区大秀| 国产日韩欧美一区在线| 亚洲伊人影院| 999在线观看精品免费不卡网站| 日韩成人亚洲| av中文字幕在线观看第一页| 日韩激情综合| 亚洲精品成a人ⅴ香蕉片| 亚洲欧美日本日韩| 欧美日韩国产欧| 香蕉精品视频在线观看| 欧美成人基地 | 国产精品二区不卡| 久久中文字幕一区二区三区| 在线视频亚洲欧美中文| 女人av一区| 亚洲二区视频| 91精品久久久久久久久久不卡| av免费不卡国产观看| 精品国产亚洲一区二区三区| 国产精品视频一区二区三区四蜜臂| 日韩三区四区| 日韩专区视频网站| 亚洲精品精选| 日韩欧美美女在线观看| 亚洲精品人人| 日本不卡视频在线| 日韩国产在线一| 日韩激情中文字幕| 蜜桃视频一区二区| 蜜臀久久久久久久| 视频精品一区二区| 少妇精品久久久一区二区三区| 亚洲精品免费观看| 欧美久久久网站| 国产精品欧美在线观看| 国产精品v一区二区三区| 国产精品超碰| 福利一区二区三区视频在线观看| 精品一二三区| 日韩黄色大片| 狠狠操综合网| 久久国产精品毛片| 中文一区一区三区免费在线观| 亚洲深夜福利在线观看| 亚洲区第一页| 久久av网址| 麻豆国产在线| 亚洲一级网站| 日韩影院免费视频| 日韩精品免费一区二区夜夜嗨| 88久久精品| 精品久久久久中文字幕小说| 中文字幕在线高清| 午夜久久美女| 中文字幕一区二区三区日韩精品 | 久久亚洲人体| www.51av欧美视频| 天堂中文av在线资源库| 91久久国产| 色婷婷成人网| 美女久久久久久| 亚洲综合在线电影| 久久成人亚洲| 欧美国产精品| 99久久婷婷| 亚洲日本免费电影| 麻豆91小视频| 亚洲大片在线| 亚洲精品自拍| 欧美韩一区二区| 日本在线精品| 深夜福利一区| 精品欧美日韩精品| 精品一区在线| 奇米亚洲欧美| а√在线中文在线新版| 欧美日韩国产在线观看网站| 在线免费观看亚洲| 精品高清久久| 亚洲一区二区成人| 欧美激情aⅴ一区二区三区 | 亚洲一区二区免费看| 91成人在线网站| 欧美日韩视频网站| 亚洲永久精品唐人导航网址| 欧美国产视频| 亚洲欧洲一区| 精品午夜视频| 亚洲伊人影院| 日韩电影在线视频| 涩涩涩久久久成人精品| 久久电影tv| 婷婷综合福利| 色88888久久久久久影院| 亚洲专区视频| 国产伦久视频在线观看| 视频一区二区中文字幕| 欧美激情日韩| 午夜在线一区| 麻豆国产91在线播放| 国产婷婷精品| 免费看av不卡| 国产精品密蕾丝视频下载| 国产精品女主播一区二区三区| 精品91福利视频| 亚洲精品极品| 欧美精品一二|