這篇文章將為大家詳細(xì)講解有關(guān)jackson中怎么自定義全局序列化、反序列化,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
目前創(chuàng)新互聯(lián)建站已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、慶云網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
創(chuàng)建一個(gè)序列化類然后繼承JsonSerializer,重寫serialize序列化方法。其中第一個(gè)參數(shù)localDateTime為JsonSerializer的泛型,表示的是被序列化的類型的值,第二個(gè)參數(shù)jsonGenerator表示的是用于輸出生成的Json內(nèi)容,第三個(gè)參數(shù)暫時(shí)沒明白什么應(yīng)用場景。重寫方法一般是將想要序列化的字符串傳入 jsonGenerator.writeString。
public final class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { public static final LocalDateTimeSerializer INSTANCE = new LocalDateTimeSerializer(); public LocalDateTimeSerializer() { } @Override public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeString(DateUtil.format(localDateTime, DateUtil.DateTimeFormatEnum.DATE_TIME_FORMAT_4)); } }
創(chuàng)建兩個(gè)類,一個(gè)類繼承JsonDeserializer,一個(gè)類繼承KeyDeserializer,重寫deserialize反序列化方法。參數(shù)jsonParser用于讀取json內(nèi)容的解析,deserializationContext可用于訪問此有關(guān)反序列化的上下文(暫時(shí)也不知道怎么用),返回值則是JsonDeserializer的泛型對(duì)象,表示要反序列化的對(duì)象。一般用法是通過jsonParser.getText().trim()獲取該字段json字符串,然后將該字符串轉(zhuǎn)換為對(duì)象返回。
public final class LocalTimeDeserializer extends JsonDeserializer<LocalTime> { public static final LocalTimeDeserializer INSTANCE = new LocalTimeDeserializer(); public LocalTimeDeserializer() { } @Override public LocalTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { String text = jsonParser.getText().trim(); return LocalTime.parse(text, DateUtil.DATE_TIME_FORMATTER_6); } }
public final class LocalDateTimeKeyDeserializer extends KeyDeserializer { public static final LocalDateTimeKeyDeserializer INSTANCE = new LocalDateTimeKeyDeserializer(); public LocalDateTimeKeyDeserializer() { } @Override public Object deserializeKey(String s, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { return StringUtils.isBlank(s) ? null : LocalDateTime.parse(s, DateUtil.DATE_TIME_FORMATTER_4); } }
@Bean public ObjectMapper objectMapper(){ ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); //不注釋,會(huì)導(dǎo)致swagger報(bào)錯(cuò) //objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); //關(guān)閉日期序列化為時(shí)間戳的功能 objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); //關(guān)閉序列化的時(shí)候沒有為屬性找到getter方法,報(bào)錯(cuò) objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); //關(guān)閉反序列化的時(shí)候,沒有找到屬性的setter報(bào)錯(cuò) objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); //序列化的時(shí)候序列對(duì)象的所有屬性 objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); //反序列化的時(shí)候如果多了其他屬性,不拋出異常 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //如果是空對(duì)象的時(shí)候,不拋異常 objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); SimpleModule simpleModule = new SimpleModule(); //json值序列化 simpleModule.addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE); //json值反序列化 simpleModule.addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE); //json鍵序列化 simpleModule.addKeySerializer(LocalDateTime.class,LocalDateTimeSerializer.INSTANCE); //json鍵反序列化 simpleModule.addKeyDeserializer(LocalDateTime.class, LocalDateTimeKeyDeserializer.INSTANCE); objectMapper.registerModule(simpleModule); return objectMapper; }
關(guān)于jackson中怎么自定義全局序列化、反序列化就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)站標(biāo)題:jackson中怎么自定義全局序列化、反序列化
URL分享:http://aaarwkj.com/article6/igegog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、虛擬主機(jī)、、網(wǎng)站維護(hù)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)