精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

人成网站在线观看| 久久高清免费视频| 日韩精品一区二区三区中文| 亚洲一区二区三区视频在线| 免费看污久久久| 国产伦子伦对白视频| 国产一区二区三区久久久久久久久| 亚洲人精品午夜在线观看| 四季av一区二区三区| 波多野结依一区| 久久国产综合| 精品处破学生在线二十三| 无码aⅴ精品一区二区三区浪潮 | 五月激情丁香网| 欧美成人tv| 在线观看国产精品日韩av| 精品国产免费久久久久久婷婷| 精品国产第一福利网站| 一区二区不卡在线视频 午夜欧美不卡在| 日韩免费av一区二区| 97在线观看免费高| 国产精品亚洲人成在99www| 日韩欧美在线网站| 美女黄色片视频| 草草在线视频| 一区二区理论电影在线观看| 亚洲日本精品| 国产小视频免费在线观看| 丁香婷婷综合色啪| 97视频人免费观看| 国产精品久久久久久久精| av中文字幕一区二区| 日韩精品在线免费| 成人小视频在线看| 变态调教一区二区三区| 亚洲免费av在线| 天堂av一区二区| 黄色av免费在线观看| 99视频超级精品| 国产激情美女久久久久久吹潮| 精品无码av在线| 在线中文一区| 久久精品国产清自在天天线| 中文字幕黄色网址| 欧美成年网站| 3d动漫精品啪啪| 91亚洲精品久久久蜜桃借种| 不卡亚洲精品| 欧美日韩国产不卡| 亚洲精品午夜在线观看| 天堂8中文在线| 亚洲人成7777| 亚洲 欧洲 日韩| 免费网站看v片在线a| 中文字幕一区二区在线播放| 亚洲午夜在线观看| 亚洲xxxxxx| 亚洲欧美日韩人成在线播放| 国产三级中文字幕| 色yeye免费人成网站在线观看| 一区二区在线免费| 国产馆精品极品| 欧美一级大片视频| 狠狠人妻久久久久久综合| 久久精品女人天堂| 国产欧美日韩中文字幕| 国产又色又爽又黄又免费| 91精品成人| 欧美成年人视频网站欧美| 538精品在线观看| 一区在线免费| 一个色综合导航| 成人18视频免费69| 中文字幕亚洲精品乱码| 久久久久久久久久国产| 欧美福利视频一区二区| 久久久久中文| 91欧美日韩一区| 黄色www视频| 久久婷婷久久一区二区三区| 亚洲精品视频一二三| 黄视频网站在线看| 五月激情六月综合| 在线观看亚洲色图| 亚洲午夜免费| 亚洲人成毛片在线播放| 欧美激情精品久久久久久免费| 黄页网站一区| 久久久国产成人精品| 精品无码一区二区三区电影桃花 | 国产草草影院ccyycom| 不卡的看片网站| 亚洲精品中文字幕在线| 久草在线视频资源| 欧美色爱综合网| 黄色免费看视频| 在这里有精品| 亚洲午夜av久久乱码| 三级影片在线看| 日韩黄色在线观看| 日本久久亚洲电影| 国产三级伦理片| 久久久综合网站| 亚洲激情免费视频| 91tv亚洲精品香蕉国产一区| 精品粉嫩aⅴ一区二区三区四区| 波多野结衣av在线观看| 国产一区二区三区自拍| 国产精品精品久久久| 日本黄色一区二区三区| 中文字幕亚洲精品在线观看| 无码精品a∨在线观看中文| 国产一区二区在线观| 亚洲天堂男人天堂| 日韩大片免费在线观看| 国产乱子伦视频一区二区三区 | 欧美午夜精品久久久| aaaaaav| 亚洲成人免费| 国产日韩中文字幕在线| 岛国大片在线观看| 精品美女久久久久久免费| 日本高清免费观看| 久久精品国产www456c0m| 17婷婷久久www| 成人精品在线播放| 亚洲精品日日夜夜| 污网站在线免费| 色135综合网| 国产精品久久久久久av| 久青青在线观看视频国产| 欧美日韩国产丝袜美女| 亚洲欧美高清在线| 国产精品v欧美精品v日本精品动漫| 国产精品综合不卡av| 国产黄在线观看免费观看不卡| 欧美日韩美女在线观看| 日本丰满少妇裸体自慰 | 一区二区三区 欧美| 国产精品一线天粉嫩av| 日韩69视频在线观看| 午夜小视频在线播放| 久久亚洲捆绑美女| 人妻久久久一区二区三区| 超碰一区二区三区| 久久久久久久久久久久av| 亚洲爱情岛论坛永久| 亚洲精品免费电影| 88av在线播放| 免费在线亚洲| 日本一区二区高清视频| 精品成人免费一区二区在线播放| 国产亚洲欧洲高清| 91精品中文字幕| 99精品欧美一区二区三区小说 | 亚洲日本中文| 精品国产欧美一区二区三区成人| 国产精品久久久久久久一区二区| 中文字幕亚洲一区二区av在线| 老司机久久精品| 欧美一区视频| 狠狠色噜噜狠狠狠狠色吗综合| 激情黄产视频在线免费观看| 精品一区电影国产| 中文字幕日日夜夜| 99精品视频一区二区三区| 欧美亚洲另类色图| 日本电影一区二区| 亚洲一区二区三区乱码aⅴ| 精精国产xxxx视频在线中文版 | 黄色影院在线看| 日韩精品视频中文在线观看 | 日本视频一区二区三区| 一本一道久久a久久综合精品| 99综合99| 国产91精品视频在线观看| 91caoporn在线| 日韩欧美国产精品一区| 欧美激情亚洲综合| 国内成人免费视频| 国产aaa免费视频| 欧美极品中文字幕| 亚洲va久久久噜噜噜| 国产免费拔擦拔擦8x高清在线人| 夜夜躁日日躁狠狠久久88av| 午夜精品久久久久久久99老熟妇| 狠狠躁夜夜躁人人爽超碰91| 91社区视频在线观看| 成人国产精品免费观看动漫| 妓院一钑片免看黄大片| 欧美国产精品| 欧美亚洲免费高清在线观看| 日韩精品一区二区三区中文在线 | 日本久久久久| 欧美亚洲成人精品| 国产美女av在线| 亚洲欧美精品伊人久久| 国产福利资源在线| 在线观看日韩毛片| 久久草视频在线| 亚洲日本成人在线观看| av网站免费在线看| 成人小视频在线| 免费成人黄色大片| 久久综合网络一区二区| 国内精品视频在线播放| 999精品网| 久久精品国亚洲| 黄色电影免费在线看| 亚洲精品一区二区三区香蕉| 91欧美日韩麻豆精品| 色香蕉久久蜜桃| b站大片免费直播| 成人在线综合网站| 99久久99精品| 日本特黄久久久高潮| 久久久噜噜噜www成人网| 欧美精品网站| 日本精品免费视频| 99精品综合| 亚洲欧洲久久| 欧美日韩一二| 欧洲亚洲一区| 久久99视频| 鲁丝片一区二区三区| 久久悠悠精品综合网| 欧亚精品在线观看| 91精品国产黑色瑜伽裤| 欧美另类老女人| 主播国产精品| 日韩www在线| 丰满人妻熟女aⅴ一区| 欧美一区二区成人| 日本三级黄色大片| 亚洲精品免费电影| 久久r这里只有精品| 综合久久久久久久| 欧美肥妇bbwbbw| 成人欧美一区二区三区小说| 国产午夜精品久久久久久久久| 久久九九久久九九| 亚洲性猛交xxxx乱大交| 欧美激情综合五月色丁香| 欧美激情亚洲色图| 国产精品网站在线观看| 9.1片黄在线观看| 国产精品国产a级| 熟女av一区二区| 一区二区三区日韩| 国产第一页在线播放| 亚洲第一精品在线| 色播视频在线播放| 91极品视觉盛宴| 九九视频免费在线观看| 亚洲男帅同性gay1069| 强乱中文字幕av一区乱码| 亚洲综合激情网| www.日本精品| 在线观看一区不卡| 国产日韩精品suv| 亚洲第一中文字幕| 日韩电影免费| 社区色欧美激情 | 性欧美ⅴideo另类hd| 97碰在线观看| 成人精品三级| 国产福利久久精品| 你懂的视频欧美| 在线观看日韩羞羞视频| 欧美在线首页| 国产乱子夫妻xx黑人xyx真爽| 日本不卡一区二区三区高清视频| 亚洲一二区在线观看| 99精品久久久久久| 91ts人妖另类精品系列| 亚洲已满18点击进入久久| 国产精品视频免费播放| 欧美日韩一区二区三区在线看| av高清一区二区| 日韩精品中文字幕久久臀| 成人在线二区| 久久久久久高潮国产精品视| 午夜日韩成人影院| 91香蕉视频在线下载| 亚洲精品白浆高清| 乱子伦一区二区| 久久精品动漫| 苍井空张开腿实干12次| 久久久精品蜜桃| 欧美极品视频在线观看| 在线观看视频一区| 日韩专区第一页| 北条麻妃一区二区三区中文字幕 | 91不卡在线观看| 97在线免费公开视频| 国模娜娜一区二区三区| 粉嫩av蜜桃av蜜臀av| 亚洲黄一区二区三区| 免费av中文字幕| 亚洲成人中文字幕| 国产高清一区二区三区视频| 日本精品中文字幕| 成人三级毛片| 粉嫩av一区二区三区天美传媒| 日产国产欧美视频一区精品| 91传媒理伦片在线观看| 国产精品久久三区| 女性裸体视频网站| 欧美日韩国产限制| 亚洲精品久久久久久无码色欲四季 | 狠狠躁夜夜躁久久躁别揉| 精品人妻午夜一区二区三区四区| 亚洲一级黄色av| 亚洲精品福利电影| 国产精品久久久久久久小唯西川 | 你懂的在线免费观看| 欧美国产乱视频| 国产精品99久久免费| 五月婷婷一区| 视频在线观看一区| 精品熟女一区二区三区| 一区二区三区四区高清精品免费观看 | 偷拍视频一区二区| 亚洲免费影视| www.日本高清| 亚洲成a人v欧美综合天堂下载 | 国产不卡在线| 国产一区二区在线免费视频| 国产精品最新| 不要播放器的av网站| 蜜桃精品视频在线| 99久久久无码国产精品性 | 亚洲综合免费视频| 日韩三级视频中文字幕| 1769在线观看| 国产免费一区二区三区在线能观看| 国产成人三级| 人人爽人人av| 国产精品素人视频| 国产一区二区三区四区hd| 亚洲成人一区| 杨幂一区二区国产精品| 亚洲精品中文字幕乱码三区| 国产男女无套免费网站| 久久影院中文字幕| 精品中文在线| av一区二区三区免费观看| 国产成人综合在线观看| 国产亚洲欧美精品久久久www | 91精品国产综合久久香蕉922| 精品一区二区三区的国产在线观看| 爆乳熟妇一区二区三区霸乳| 国产欧美日韩激情| 一级黄色a视频| 久久久久北条麻妃免费看| 精品国产三级| 日本a在线免费观看| 26uuu成人网一区二区三区| 中文字幕 国产精品| 神马久久桃色视频| 日韩视频一二区| 国自产拍偷拍精品啪啪一区二区 | 精品国产乱码久久| 日本а中文在线天堂| 日韩欧美视频一区二区| 精品一区二区av| 国产第一页在线播放| 亚洲一区二区久久久| 四虎国产精品成人免费影视| av中文字幕av| 337p粉嫩大胆噜噜噜噜噜91av | 美女黄色片网站| 不卡的电视剧免费网站有什么| 天堂在线免费观看视频| 中文字幕免费精品一区高清| 日韩高清在线观看一区二区| 国产亚洲天堂网| 亚洲人成网站精品片在线观看| 国 产 黄 色 大 片| 国产精品成人久久久久| 中文字幕一区二区三区久久网站 | 亚洲综合小说图片| 亚洲黄色片免费看| 日韩欧美中文字幕在线播放| 看黄网站在线| 牛人盗摄一区二区三区视频| 国产在线精品一区二区不卡了 | 麻豆九一精品爱看视频在线观看免费| 欧洲性xxxx| 亚洲韩国青草视频| 欧美91在线|欧美| 国产乱子伦农村叉叉叉| 日韩一区在线播放| 青青青手机在线视频观看| 91手机视频在线观看| 久久久久久久波多野高潮日日| 欧美精品一级片| 日韩在线中文视频| 亚洲欧美校园春色| 97精品人人妻人人|