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

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

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

瀏覽:31日期: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久久,三上悠亚国产精品一区二区三区
日韩国产欧美在线播放| 日韩精品中文字幕一区二区| 欧美特黄a级高清免费大片a级| 日韩欧美另类一区二区| 亚洲精品**中文毛片| 手机在线电影一区| av在线最新| 久久久久免费av| 久久精品高清| 在线亚洲欧美| 中文字幕av一区二区三区四区| 免费视频一区二区| 日本成人在线一区| 精品视频免费| 日韩精品一区二区三区免费观影| 国产一区亚洲| 一区二区亚洲视频| 日韩久久一区| 国产精品乱战久久久| 久久亚洲黄色| 欧美成人综合| 亚洲一区二区三区久久久| 日本天堂一区| 精品国产精品久久一区免费式| 久久天堂av| 六月婷婷一区| 国产日韩一区二区三免费高清 | 欧美午夜三级| 欧美精品aa| 日韩在线观看一区| 国产毛片一区| 国产精品宾馆| 99国产精品一区二区| 久久av在线| 国产伦理久久久久久妇女| 国产一区二区久久久久| 久久国产电影| 日韩影片在线观看| 精品午夜久久| 99久久夜色精品国产亚洲1000部| 亚洲作爱视频| 国产精品一区二区精品视频观看| 日韩国产一区| 中文字幕亚洲在线观看| 欧美日韩亚洲三区| 群体交乱之放荡娇妻一区二区| 亚洲日韩中文字幕一区| 美女视频黄 久久| 欧美va亚洲va日韩∨a综合色| 亚洲精品激情| 中国字幕a在线看韩国电影| 国产婷婷精品| 里番精品3d一二三区| 一本一本久久| 岛国精品一区| 午夜亚洲福利| 亚洲成人国产| 国产欧美日韩亚洲一区二区三区| 欧美日韩一二三四| 日韩国产欧美在线播放| 99久精品视频在线观看视频| 偷拍亚洲精品| 国产精品久久久久av电视剧| 少妇高潮一区二区三区99| 中文字幕在线视频网站| 中文字幕成人| 国产99久久| 久久精品国产在热久久| 日韩精品一二三| 成人片免费看| 国产欧美高清| 亚洲免费在线| 婷婷激情一区| 国产精品久久久久久久久久妞妞 | 日韩伦理在线一区| 日韩精品久久久久久久软件91| 日本综合字幕| 国产精品毛片久久久| 丝袜美腿亚洲色图| 韩国久久久久久| 欧美日韩一区二区三区不卡视频| 午夜日韩在线| 精品三级国产| 久久亚洲影院| 国产欧美午夜| 亚洲无线观看| 亚洲女同中文字幕| 午夜欧美巨大性欧美巨大| 国产精品久久国产愉拍| 免费成人在线影院| 成人av二区| 久久久久久久久丰满| 成人在线视频区| 国产精一区二区| 偷拍亚洲精品| 一区二区三区国产盗摄| 亚洲精品99| 国产91在线播放精品| 欧美日韩夜夜| 亚洲aa在线| 国产农村妇女精品一区二区| 久久精品导航| 中文字幕人成乱码在线观看| 麻豆一区二区三区| 欧美一区网站| 日本不卡一区二区三区| 天使萌一区二区三区免费观看| 国产精品字幕| 黄色av日韩| 视频精品一区二区| 精品在线99| 美女网站一区| 亚洲免费资源| 日韩欧美二区| 美国欧美日韩国产在线播放| 成人在线黄色| 青草国产精品久久久久久| 美女黄网久久| 欧美精品一区二区久久| 日本色综合中文字幕| 国产亚洲激情| 在线观看一区| 欧美日一区二区在线观看| 国产乱子精品一区二区在线观看| 日本亚州欧洲精品不卡| 午夜宅男久久久| 久久精品99国产国产精| 久久黄色影视| 欧美gv在线| 综合一区av| 免费在线亚洲欧美| 精品一区视频| 日本精品黄色| 影音国产精品| 国产精品1区在线| 国产亚洲精aa在线看| 国产麻豆久久| 国产欧美日韩在线观看视频| 久久精品免费一区二区三区| 国产suv精品一区| 国产精品久久久久久模特| av亚洲在线观看| 国产高清精品二区| 久久亚洲影院| 欧美亚洲三级| 亚洲国产专区| 午夜一级久久| 日韩欧美美女在线观看| 日本视频一区二区| 国产日韩欧美一区在线| 麻豆精品久久久| 国产成人久久精品一区二区三区| 最新亚洲激情| 蜜臀久久久99精品久久久久久| 精品三级国产| 日韩一区三区| 亚洲激情国产| 日韩一级欧洲| 日本麻豆一区二区三区视频| 麻豆精品新av中文字幕| 亚洲一级少妇| 亚洲一区黄色| 国产精品久久久久久久久免费高清| 福利一区视频| 国产一区白浆| 国产人成精品一区二区三| 日韩欧美另类一区二区| 日韩中文字幕区一区有砖一区 | 欧美精品羞羞答答| 综合亚洲自拍| 久久精品国产网站| 午夜日本精品| 91精品国产经典在线观看| 精品视频自拍| 欧美亚洲国产精品久久| 午夜亚洲福利| 亚洲精品电影| 国产毛片精品| 亚洲午夜一级| 日韩国产在线一| 欧美少妇精品| 免费在线欧美视频| 久久国产乱子精品免费女| 四虎4545www国产精品 | 爽好久久久欧美精品| 国产乱码精品一区二区三区四区| 日韩欧美二区| 日本欧美久久久久免费播放网| 97精品国产一区二区三区| 日韩中文字幕一区二区三区| 免费在线观看一区| 亚洲欧美久久久| 色综合五月天| 模特精品在线| 久久女人天堂| 免费视频一区二区| 日韩.com| 日本成人一区二区| 亚洲香蕉网站| 欧美日韩一区二区国产|