AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

SpringBoot中如何優(yōu)雅地個性化定制Jackson

來源: 責編: 時間:2023-12-20 17:46:56 254觀看
導讀哈嘍,大家好,我是了不起。當使用 JSON 格式時,Spring Boot 將使用ObjectMapper實例來序列化響應和反序列化請求。在本教程中,我們將了解配置序列化和反序列化選項的最常用方法。一、默認配置默認情況下,Spring Boot 配置將

哈嘍,大家好,我是了不起。Lff28資訊網(wǎng)——每日最新資訊28at.com

當使用 JSON 格式時,Spring Boot 將使用ObjectMapper實例來序列化響應和反序列化請求。Lff28資訊網(wǎng)——每日最新資訊28at.com

在本教程中,我們將了解配置序列化和反序列化選項的最常用方法。Lff28資訊網(wǎng)——每日最新資訊28at.com

Lff28資訊網(wǎng)——每日最新資訊28at.com

一、默認配置

默認情況下,Spring Boot 配置將禁用以下功能:Lff28資訊網(wǎng)——每日最新資訊28at.com

  • MapperFeature.DEFAULT_VIEW_INCLUSION
  • DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
  • SerializationFeature.WRITE_DATES_AS_TIMESTAMPS

例子

讓我們從一個簡單的例子開始:Lff28資訊網(wǎng)——每日最新資訊28at.com

  • 客戶端將向我們的/boy?name=gotanks發(fā)送一個 GET 請求。
  • 控制器將返回一個新的Boy對象。
  • Spring 將使用 ObjectMapper 將我們的 POJO 序列化為 JSON。

我們將通過使用 String 和 LocalDateTime 對象來舉例說明自定義選項:Lff28資訊網(wǎng)——每日最新資訊28at.com

@Datapublic class Boy {    private String name;    private Integer age;    private LocalDateTime birth;}

我們還將定義一個簡單的 REST 控制器來演示序列化:Lff28資訊網(wǎng)——每日最新資訊28at.com

@GetMapping("/boy")public Boy getBoy(    @RequestParam(required = false) Integer age,    @RequestParam(required = false) String name) {    return new Boy()      .setAge(age)      .setDate(LocalDateTime.now())      .setName(name);}

默認情況下,這將是調(diào)用 GET http://localhost:8080/boy?name=gotanks 時的響應:Lff28資訊網(wǎng)——每日最新資訊28at.com

{  "name": "gotanks",  "age": null,  "date": "2023-12-19T10:21:35.974"}

我們希望排除空值并使用自定義日期格式 yyyy-MM-dd HH:mm:ss。這是我們的最終回應:Lff28資訊網(wǎng)——每日最新資訊28at.com

{  "name": "gotanks",  "date": "2023-12-19 10:21:35"}

二、自定義ObjectMapper

下面,我們將了解如何自定義 Spring Boot 使用的默認ObjectMapper。Lff28資訊網(wǎng)——每日最新資訊28at.com

1.應用程序?qū)傩?/h4>

配置映射器的最簡單方法是通過 application.propertiesLff28資訊網(wǎng)——每日最新資訊28at.com

這是配置的一般結(jié)構(gòu):Lff28資訊網(wǎng)——每日最新資訊28at.com

spring.jackson.<category_name>.<feature_name>=true,false

例如,我們將添加以下內(nèi)容以禁用 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS:Lff28資訊網(wǎng)——每日最新資訊28at.com

spring.jackson.serialization.write-dates-as-timestamps=false

除了提到的特征類別,我們還可以配置屬性包含:Lff28資訊網(wǎng)——每日最新資訊28at.com

spring.jackson.default-property-inclusion=always, non_null, non_absent, non_default, non_empty

配置環(huán)境變量是最簡單的方法。這種方法的缺點是我們無法自定義高級選項,例如為LocalDateTime自定義日期格式。Lff28資訊網(wǎng)——每日最新資訊28at.com

2.自定義 Jackson 模塊

為了實現(xiàn)我們的目標,我們將使用我們的自定義日期格式注冊一個新的 JavaTimeModule :Lff28資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic class JacksonConfig {    @Bean    public Module javaTimeModule() {        JavaTimeModule module = new JavaTimeModule();        module.addSerializer(LOCAL_DATETIME_SERIALIZER);        return module;    }}

SpringBoot 將自動注冊com.fasterxml.jackson.databind.Module類型的任何 bean 。這是我們的最終結(jié)果:Lff28資訊網(wǎng)——每日最新資訊28at.com

{  "name": "gotanks",  "age": null,  "date": "2023-12-19 10:21:35"}

3.Jackson2ObjectMapperBuilderCustomizer

這個函數(shù)接口的目的是允許我們創(chuàng)建配置bean。Lff28資訊網(wǎng)——每日最新資訊28at.com

它們將被應用到通過 Jackson2ObjectMapperBuilder 創(chuàng)建的默認 ObjectMapper:Lff28資訊網(wǎng)——每日最新資訊28at.com

@Beanpublic Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {    return builder -> builder.serializationInclusion(JsonInclude.Include.NON_NULL)      .serializers(LOCAL_DATETIME_SERIALIZER);}

配置bean以特定的順序應用,我們可以使用 @Order 注解控制該順序。如果我們想從不同的配置或模塊配置ObjectMapper,那么這種優(yōu)雅的方法非常適合。Lff28資訊網(wǎng)——每日最新資訊28at.com

三、覆蓋默認配置

如果我們想完全控制配置,有幾個選項可以禁用自動配置并只允許應用我們的自定義配置。Lff28資訊網(wǎng)——每日最新資訊28at.com

讓我們仔細看看這些選項。Lff28資訊網(wǎng)——每日最新資訊28at.com

1.ObjectMapper

覆蓋默認配置的最簡單方法是定義一個ObjectMapper bean 并將其標記為 @Primary:Lff28資訊網(wǎng)——每日最新資訊28at.com

@Bean@Primarypublic ObjectMapper objectMapper() {    JavaTimeModule module = new JavaTimeModule();    module.addSerializer(LOCAL_DATETIME_SERIALIZER);    return new ObjectMapper()      .setSerializationInclusion(JsonInclude.Include.NON_NULL)      .registerModule(module);}

當我們想要完全控制序列化過程并且不想允許外部配置時,我們應該使用這種方法。Lff28資訊網(wǎng)——每日最新資訊28at.com

2.Jackson2ObjectMapperBuilder

另一種干凈的方法是定義一個Jackson2ObjectMapperBuilder bean 。Lff28資訊網(wǎng)——每日最新資訊28at.com

Spring Boot 實際上在構(gòu)建ObjectMapper時默認使用這個構(gòu)建器,并且會自動選擇定義的那個:Lff28資訊網(wǎng)——每日最新資訊28at.com

@Beanpublic Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {    return new Jackson2ObjectMapperBuilder().serializers(LOCAL_DATETIME_SERIALIZER)      .serializationInclusion(JsonInclude.Include.NON_NULL);}

它會默認配置兩個選項:Lff28資訊網(wǎng)——每日最新資訊28at.com

  • 禁用 MapperFeature.DEFAULT_VIEW_INCLUSION
  • 禁用 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES

根據(jù)Jackson2ObjectMapperBuilder文檔,如果它們存在于類路徑中,它還將注冊一些模塊:Lff28資訊網(wǎng)——每日最新資訊28at.com

  • jackson-datatype-jdk8: 支持其他 Java 8 類型,如Optional
  • jackson-datatype-jsr310: 支持 Java 8 日期和時間 API 類型
  • jackson-datatype-joda: 支持 Joda-Time 類型
  • jackson-module-kotlin: 支持 Kotlin 類和數(shù)據(jù)類

這種方法的優(yōu)點是 Jackson2ObjectMapperBuilder 提供了一種簡單直觀的方式來構(gòu)建 ObjectMapper。Lff28資訊網(wǎng)——每日最新資訊28at.com

3.MappingJackson2HttpMessageConverter

我們可以定義一個MappingJackson2HttpMessageConverter 類型的 bean ,Spring Boot 會自動使用它:Lff28資訊網(wǎng)——每日最新資訊28at.com

@Beanpublic MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder().serializers(LOCAL_DATETIME_SERIALIZER)      .serializationInclusion(JsonInclude.Include.NON_NULL);    return new MappingJackson2HttpMessageConverter(builder.build());}

四、總結(jié)

在本文中,我們了解了在使用 SpringBoot 時配置 JSON 序列化選項的幾種方法。Lff28資訊網(wǎng)——每日最新資訊28at.com

我們看到了兩種不同的方法:配置默認選項或覆蓋默認配置。Lff28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-50760-0.htmlSpringBoot中如何優(yōu)雅地個性化定制Jackson

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 面試官:什么是虛擬線程?為什么要有虛擬線程?

下一篇: Linux從外到內(nèi)剝開動態(tài)庫,一個簡單例子看懂Linux下的動態(tài)庫開發(fā)原理

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質(zhì)感拉滿

    終于,在經(jīng)過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網(wǎng)上出現(xiàn)了。還是博主數(shù)碼閑聊站曝光的,這次的外觀設(shè)計還是延續(xù)了一加11的方案,只是細節(jié)上有了調(diào)整,例如新加入了鈦空灰
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • 十個可以手動編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數(shù)量是否小于或等于一個數(shù)字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 如何通過Python線程池實現(xiàn)異步編程?

    線程池的概念和基本原理線程池是一種并發(fā)處理機制,它可以在程序啟動時創(chuàng)建一組線程,并將它們置于等待任務(wù)的狀態(tài)。當任務(wù)到達時,線程池中的某個線程會被喚醒并執(zhí)行任務(wù),執(zhí)行完任
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業(yè)觀察編 | 肖海林今年以來,威士忌市場開始出現(xiàn)了降溫跡象,越來越多不斷暴漲的網(wǎng)紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 國行版三星Galaxy Z Fold5/Z Flip5發(fā)布 售價7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國發(fā)布會,正式在國內(nèi)推出了新一代折疊屏智能手機三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
  • 滴滴違法違規(guī)被罰80.26億 共存在16項違法事實

    滴滴違法違規(guī)被罰80.26億 存在16項違法事實開始于2121年7月,歷經(jīng)一年時間,網(wǎng)絡(luò)安全審查辦公室對“滴滴出行”網(wǎng)絡(luò)安全審查終于有了一個暫時的結(jié)束。據(jù)“網(wǎng)信
  • 蘋果140W USB-C充電器:采用氮化鎵技術(shù)

    據(jù)10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
Top