精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring Boot 自定義Jackson ObjectMapper,你學會了嗎?

開發 項目管理
在這篇文章中,我們看了使用Spring Boot時配置JSON序列化選項的幾種方法。我們看到了兩種不同的方法:配置默認選項或重寫默認配置。

在Spring Boot Web 項目中,當使用JSON格式接收數據和返回數據的時候,Spring Boot 默認使用一個ObjectMapper實例來序列化響應和反序列化請求。

在本文中,我們將看看配置序列化和反序列化選項的最常用方法。

默認配置

默認情況下,Spring Boot的配置將禁用以下配置項。

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

舉個例子

  • 客戶端將發送一個GET請求到我們的/coffee?name=Javazzz。
  • 控制器將返回一個新的Coffee對象。
  • Spring將使用ObjectMapper將我們的POJO序列化為JSON。

我們將通過使用String和LocalDateTime對象來示范定制選項。

public class Coffee {

private String name;
private String brand;
private LocalDateTime date;

//getter and setter
}

我們還將定義一個簡單的REST控制器來演示序列化。

@GetMapping("/coffee")
public Coffee getCoffee(
@RequestParam(required = false) String brand,
@RequestParam(required = false) String name) {
return new Coffee()
.setBrand(brand)
.setDate(FIXED_DATE)
.setName(name);
}

默認情況下,這將是調用GET http://lolcahost:8080/coffee?brand=javazzz 時的響應。


{
"name": null,
"brand": "javazzz",
"date": "2022-06-16T10:21:35.974"
}

我們希望排除空值,并有一個自定義的日期格式(dd-MM-yyyy HH:mm)。這就是我們的響應結果。

{
"brand": "javazzz",
"date": "06-11-2022 10:34"
}

在使用Spring Boot時,我們可以選擇定制默認的ObjectMapper或覆蓋它。我們將在接下來的章節中介紹這兩個選項。

自定義默認的ObjectMapper

在本節中,我們將看到如何定制Spring Boot使用的默認ObjectMapper。

1.應用程序屬性和自定義 Jackson 模塊

配置映射器的最簡單方法是通過應用程序屬性。

下面是配置的一般結構。

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

作為一個例子,下面是我們要添加的內容,以禁用SerializationFeature.WRITE_DATES_AS_TIMESTAMPS。

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

除了提到的特征類別,我們還可以配置屬性的包含。

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

配置環境變量是最簡單的方法。這種方法的缺點是,我們不能定制高級選項,比如為LocalDateTime定制日期格式。

在這一點上,我們會得到這樣的結果。

{
"brand": "javazzz",
"date": "2022-06-16T10:35:34.593"
}

為了實現我們的目標,我們將注冊一個新的JavaTimeModule,用我們的自定義日期格式。

@Configuration
@PropertySource("classpath:coffee.properties")
public class CoffeeRegisterModuleConfig {

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

另外,配置屬性文件coffee.properties將包含以下內容。

spring.jackson.default-property-inclusion=non_null

Spring Boot會自動注冊任何類型為com.fastxml.jackson.databind.Module的bean。下面是我們的最終結果。

{
"brand": "Javazzz",
"date": "16-06-2022 10:43"
}

2.Jackson2ObjectMapperBuilderCustomizer

這個功能接口的目的是讓我們創建配置。

它們將被應用于通過Jackson2ObjectMapperBuilder創建的默認ObjectMapper。

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

配置得以特定的順序應用,我們可以使用@Order annotation來控制。如果我們想從不同的配置或模塊來配置ObjectMapper,這種優雅的方法是適合的。

重寫默認配置

如果我們想完全控制配置,有幾個選項可以禁用自動配置,只允許應用我們的自定義配置。

讓我們仔細研究一下這些選項。

1.ObjectMapper

覆蓋默認配置的最簡單方法是定義一個ObjectMapper Bean并將其標記為@Primary。

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

當我們想完全控制序列化過程而不想允許外部配置時,我們應該使用這種方法。

2.Jackson2ObjectMapperBuilder

另一種干凈的方法是定義一個Jackson2ObjectMapperBuilderbean。

實際上,Spring Boot在構建ObjectMapper時默認使用這個構建器,并會自動拾取定義的構建器。

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

它將默認配置兩個選項。

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

根據Jackson2ObjectMapperBuilder 文檔,如果classpath上有一些模塊,它也會注冊這些模塊。

  • jackson-datatype-jdk8:支持其他Java 8類型,如Optional
  • jackson-datatype-jsr310:支持Java 8 Date and Time API類型
  • jackson-datatype-joda:支持Joda-Time類型
  • jackson-module-kotlin:支持Kotlin類和數據類

這種方法的優點是,Jackson2ObjectMapperBuilder提供了一種簡單而直觀的方法來構建ObjectMapper。

3.MappingJackson2HttpMessageConverter的方法

我們可以直接定義一個類型為MappingJackson2HttpMessageConverter的bean,Spring Boot會自動使用它。

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

測試配置

為了測試我們的配置,我們將使用TestRestTemplate并將對象序列化為String。

通過這種方式,我們可以驗證我們的Coffee對象在序列化時沒有null值,并且具有自定義的日期格式。

@Test
public void whenGetCoffee_thenSerializedWithDateAndNonNull() {
String formattedDate = DateTimeFormatter.ofPattern(CoffeeConstants.dateTimeFormat).format(FIXED_DATE);
String brand = "Javazza";
String url = "/coffee?brand=" + brand;

String response = restTemplate.getForObject(url, String.class);

assertThat(response).isEqualTo("{\"brand\":\"" + brand + "\",\"date\":\"" + formattedDate + "\"}");
}

總結

在這篇文章中,我們看了使用Spring Boot時配置JSON序列化選項的幾種方法。

我們看到了兩種不同的方法:配置默認選項或重寫默認配置。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2022-07-11 09:00:37

依賴配置文件Mybati

2024-11-27 11:07:20

vue計算屬性

2022-08-08 08:17:43

類隔離加載器自定義類

2024-01-02 07:04:23

2022-07-08 08:17:48

Spring接口配置

2023-11-06 07:25:51

Spring配置應用程序

2022-02-17 07:10:39

Nest自定義注解

2022-04-26 08:41:54

JDK動態代理方法

2022-01-20 07:31:49

架構

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-05-05 08:29:15

Spring后臺服務器

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2024-03-04 07:41:18

SpringAOPOOP?

2022-07-08 09:27:48

CSSIFC模型

2024-08-06 09:47:57

2023-10-10 11:04:11

Rust難點內存
點贊
收藏

51CTO技術棧公眾號

国产精品狼人久久影院观看方式| 亚洲精品123区| 6080午夜不卡| 无码熟妇人妻av在线电影| 五月婷婷伊人网| 美女视频黄久久| 欧美激情a在线| 日韩精品无码一区二区三区久久久| 国产精品久久久久77777丨| 一区二区三区影院| 任我爽在线视频精品一| 一区二区三区黄| 亚洲毛片一区| xxxxx成人.com| 亚洲av成人无码一二三在线观看| 不卡亚洲精品| 亚洲国产日韩a在线播放| 色综合久久av| 手机看片一区二区三区| 久久99热国产| 青青草精品毛片| 久久无码精品丰满人妻| 成人影院天天5g天天爽无毒影院| 精品国产欧美一区二区| 日本高清一区二区视频| xx欧美视频| 亚洲成人免费看| 国产精品久久久久久网站| 欧美专区福利在线| 免费中文字幕日韩| 国产欧美日韩一区二区三区四区| 欧美一区二区三区色| 欧美成人黑人猛交| a天堂资源在线| 亚洲精品免费在线| 一区二区在线观看网站| 免费播放片a高清在线观看| 国产aⅴ综合色| 成人久久一区二区三区| 五月婷婷丁香在线| 久久高清一区| 97在线精品视频| 国产真人真事毛片| 欧美jizzhd精品欧美巨大免费| 中文字幕日韩av综合精品| 国产精品无码一区二区三区| 国产精品久久久久av蜜臀| 91精品国产综合久久精品麻豆 | 精品国产91| 日韩精品欧美激情| 在线黄色免费网站| jazzjazz国产精品麻豆| 欧美一区三区二区| 亚洲高清在线不卡| 在线观看欧美| 91精品国产综合久久蜜臀| 中文字幕 日韩 欧美| 成人黄色免费观看| 欧美日韩一区中文字幕| 天天干天天综合| 日本电影久久久| 56国语精品自产拍在线观看| 涩多多在线观看| 9999精品视频| 欧美一级夜夜爽| 99国产精品免费视频| caoporn成人| 日韩黄在线观看| 国产真实乱人偷精品人妻| 国产精品视频一区二区三区四蜜臂| 亚洲人成伊人成综合网久久久| 国产特黄级aaaaa片免| 精品美女久久久| 日韩一区二区三区xxxx| 久久久久亚洲AV成人| 一区在线观看| 国产精品99导航| 一二三四区视频| 成人中文字幕在线| 欧美极品jizzhd欧美| 成人精品一区二区三区校园激情| 中文字幕一区二区日韩精品绯色| 成人性做爰片免费视频| 97久久人人超碰caoprom| 五月婷婷激情综合| 成人精品小视频| 欧美韩国日本| 欧美精品一区二区三区视频 | 日本一区二区在线不卡| 三年中文高清在线观看第6集| 深夜国产在线播放| 一本色道亚洲精品aⅴ| 小明看看成人免费视频| 久久超级碰碰| 中文字幕在线亚洲| 日本少妇性生活| 日韩中文字幕1| 亚洲伊人一本大道中文字幕| 偷拍自拍在线| 亚洲欧洲av色图| 欧美老熟妇喷水| 国产亚洲精品精品国产亚洲综合| 欧美一二三四区在线| 99久久人妻无码精品系列| 亚洲高清影视| 日韩免费av一区二区| 国产黄色高清视频| 国产亚洲成av人在线观看导航| 久久免费一级片| 神马电影网我不卡| 精品精品欲导航| 97在线观看免费视频| 亚洲无线一线二线三线区别av| 国产99视频精品免视看7| 精品国产av一区二区三区| 国产午夜久久久久| 国产中文字幕二区| 99久久这里有精品| 亚洲视频精品在线| 日韩av黄色片| 国产激情偷乱视频一区二区三区| 日韩电影天堂视频一区二区| 91在线三级| 欧美大片日本大片免费观看| 中文字幕资源站| 日韩高清中文字幕一区| 久久久影院一区二区三区| 色黄网站在线观看| 日韩视频一区二区三区| 国产小视频你懂的| 青娱乐精品视频| 欧美日韩一区综合| 成人福利av| 日韩av中文字幕在线| 国产精品第九页| 国产精品18久久久久| 亚洲天堂第一区| 粉嫩av国产一区二区三区| 尤物tv国产一区| 精品成人无码久久久久久| 99久久综合99久久综合网站| 国产女主播av| 91精品丝袜国产高跟在线| 久久久精品国产亚洲| 亚洲一卡二卡在线观看| 国产三级精品在线| 日韩免费高清在线| 欧美精品一区二区久久| 国产成人精品一区二区在线| 黄视频在线观看免费| 色综合天天综合给合国产| 成人免费av片| 日韩黄色片在线观看| 日本在线高清视频一区| 日韩欧美精品一区二区综合视频| 亚洲日本中文字幕| 一级一片免费看| 国产欧美一区二区精品久导航 | 亚洲最大的黄色网址| 国产又粗又猛又爽又黄91精品| 午夜在线视频免费观看| 亚洲精品午夜| 91国内精品久久| 香蕉视频国产在线| 在线观看亚洲专区| 成年人看的免费视频| 韩国女主播成人在线| 久久www视频| 国产在线播放精品| 欧美一级片一区| 成a人片在线观看www视频| 欧美日韩欧美一区二区| 国产女人被狂躁到高潮小说| 成人自拍视频在线观看| 久久美女福利视频| 日韩一区自拍| 国产精品日韩欧美一区二区| 天堂√中文最新版在线| 在线成人激情视频| 国产av无码专区亚洲a∨毛片| 亚洲午夜在线视频| 国精产品一区二区三区| 极品美女销魂一区二区三区| 2019日韩中文字幕mv| 国内亚洲精品| 91传媒视频免费| 激情都市亚洲| 久久人人爽人人爽人人片亚洲| 黄色一级a毛片| 色噜噜狠狠一区二区三区果冻| 182在线观看视频| 99精品在线观看视频| 超碰在线人人爱| 激情婷婷久久| 亚洲成人自拍| 老牛精品亚洲成av人片| 国产精品网站大全| 特级毛片在线| 中文字幕久热精品视频在线| 免费观看a视频| 欧美性色综合网| 亚洲视频免费播放| 日韩毛片一二三区| 亚洲激情视频小说| 岛国av在线一区| 自拍偷拍一区二区三区四区| 亚洲片区在线| 中文字幕色呦呦| 欧美在线观看视频一区| 精品1区2区| 精品中文字幕一区二区三区| 国产成人涩涩涩视频在线观看| 深夜国产在线播放| 日韩中文字幕在线播放| 国产原创av在线| 亚洲精品美女在线| 丰满肉肉bbwwbbww| 91 com成人网| 自拍偷拍色综合| 欧美性猛交xxxx乱大交| 精品在线视频免费观看| 成人欧美一区二区三区黑人麻豆| 国产精品密蕾丝袜| av电影天堂一区二区在线观看| 国产欧美精品一二三| 日本欧美在线看| 男人亚洲天堂网| 中文在线一区| 婷婷无套内射影院| 欧美特黄视频| 成人国产一区二区三区| 久久久久久久久久久9不雅视频| 日本不卡在线播放| 精品一区毛片| 欧美日韩精品久久| 天天久久夜夜| 免费不卡亚洲欧美| 日韩高清三区| 久久综合中文色婷婷| 欧美丝袜美腿| 蜜桃久久影院| 久久综合亚洲| 日韩国产美国| 久久精品国产大片免费观看| 亚洲a∨一区二区三区| 不卡一区2区| 亚洲免费不卡| 久久国产中文字幕| 中文字幕中文字幕在线中心一区| 欧美高清视频手机在在线| 亚洲三区视频| 亚州av乱码久久精品蜜桃| 男女h黄动漫啪啪无遮挡软件| 亚洲色图网站| 国产精品三级一区二区| 激情成人亚洲| 欧美黄色免费影院| 久热综合在线亚洲精品| 精品久久久久久久无码| 久久国内精品视频| 午夜激情影院在线观看| 国产福利一区二区三区| 精品1卡二卡三卡四卡老狼| 99国产欧美久久久精品| 日韩一区二区a片免费观看| 国产欧美一区二区精品忘忧草| 亚洲视频重口味| 亚洲在线一区二区三区| 亚洲精品男人的天堂| 欧美在线视频不卡| 国产特黄一级片| 亚洲精品国产精品国产自| 韩国三级在线观看久| 久久精品成人一区二区三区| 麻豆av在线播放| 57pao精品| 国产精品久久久久久妇女| 亚洲一区二区三区香蕉| 露出调教综合另类| 深田咏美在线x99av| 国产韩日影视精品| 精品少妇人妻av免费久久洗澡| 久久这里只有| 色婷婷综合在线观看| 欧美黑人一级片| 一区二区三区成人| 国产午夜精品久久久久| 欧美日韩国产中文| 国产不卡精品视频| 亚洲成人中文字幕| 欧美尤物美女在线| 午夜剧场成人观在线视频免费观看| 激情开心成人网| 97在线资源站| 欧美日韩一二三四| 草草视频在线免费观看| 免费高清成人在线| 中文字幕乱码一区| 自拍视频在线观看一区二区| 久久久久久久久久影院| 欧美猛男男办公室激情| 深夜福利免费在线观看| 久色乳综合思思在线视频| 大胆人体一区二区| www.成人av| 999成人网| 丁香婷婷激情网| 99久久婷婷国产综合精品| 老司机深夜福利网站| 日韩欧美亚洲范冰冰与中字| a天堂在线视频| 一区二区亚洲欧洲国产日韩| 2021中文字幕在线| 亚洲一区亚洲二区| 色综合狠狠操| 成人三级视频在线播放| 成人高清伦理免费影院在线观看| 一区二区三区在线播放视频| 欧美性猛交xxxx免费看漫画| www夜片内射视频日韩精品成人| 中文精品99久久国产香蕉| 在线黄色的网站| 国产一区二区精品在线| 国产精品sm| 91丝袜超薄交口足| 国产精品久久精品日日| 久草视频在线免费| 亚洲欧美中文另类| 这里有精品可以观看| 国产经典一区二区三区 | 国产女主播av| 久久超碰97人人做人人爱| 欧美激情 一区| 色哟哟一区二区在线观看| 天天干天天干天天干| 欧美精品久久久久久久免费观看| 视频在线一区| 国产一级片91| 国产成人自拍高清视频在线免费播放| 成年人免费视频播放| 欧美日韩一区二区在线观看| 成人免费一区二区三区视频网站| 国产成人精品视频在线观看| 欧美人与物videos另类xxxxx| 精品www久久久久奶水| 久久色视频免费观看| 中文字幕黄色片| 亚洲色图18p| 日韩欧美精品一区二区综合视频| 欧美久久在线| 日韩国产精品久久久久久亚洲| 国产成人一区二区在线观看| 欧美三区在线观看| 日本中文字幕在线看| 成人有码在线视频| 欧美日韩一区二区三区四区在线观看| 1314成人网| 亚洲一区二区成人在线观看| 日韩一级片免费看| 51久久精品夜色国产麻豆| 九九视频精品全部免费播放| 欧美日韩大尺度| 国产精品国产精品国产专区不蜜| 国产精品无码天天爽视频| 久久99久久亚洲国产| 精品欠久久久中文字幕加勒比| 日本三级免费网站| 国产日韩欧美精品综合| 国产精品欧美久久久久天天影视| 欧美大片va欧美在线播放| 精品久久97| 日本特黄a级片| 一区二区三区在线视频免费| 欧美特黄一级视频| 日韩av电影中文字幕| 欧美电影免费播放| jjzz黄色片| 色婷婷国产精品| 日本视频在线播放| 国产伦精品一区| 青娱乐精品在线视频| 老女人性淫交视频| 亚洲欧洲日产国产网站| 国内不卡的一区二区三区中文字幕| 国产精品视频网站在线观看| 91社区在线播放| 国产精品久久无码一三区| 91高清视频在线免费观看| 欧美日韩国产免费观看视频| 黑人巨大猛交丰满少妇| 福利视频第一区| 青青青青在线| 免费一区二区三区在在线视频| 蜜桃视频在线观看一区| 日本少妇性生活| 日韩亚洲欧美中文高清在线| 西野翔中文久久精品字幕| 一二三级黄色片| 色综合久久88色综合天天免费| 中文国产字幕在线观看|