最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot通過(guò)ObjectMapper配置json序列化詳解

 更新時(shí)間:2024年10月21日 08:32:17   作者:你住過(guò)的屋檐  
SpringBoot默認(rèn)集成Jackson庫(kù),其中ObjectMapper類是核心,用于Java對(duì)象與JSON字符串的互轉(zhuǎn),提供配置序列化特性、注冊(cè)模塊等方法,在SpringBoot中可以全局配置JSON格式,如日期格式化、將Long轉(zhuǎn)為字符串,還可以配置序列化時(shí)的各種規(guī)則,感興趣的可以了解一下

前言

Spring Boot 默認(rèn)集成了 Jackson,ObjectMapper 是 Jackson 庫(kù)中的一個(gè)核心類,它是用于將 Java 對(duì)象轉(zhuǎn)換為 JSON 字符串,以及將 JSON 字符串轉(zhuǎn)換回 Java 對(duì)象的主要工具。主要用于將數(shù)據(jù)格式化為指定格式,方便顯示。

一、ObjectMapper主要提供了以下方法

1、configure(SerializationFeature f, boolean state);//用于配置序列化、反序列化、JsonParser特性、JsonGenerator 特性,
2、enable(T f,T…)//啟用功能
3、disable(T f,T…)//禁用功能
4、 registerModule(Module module)//注冊(cè)序列化器
5、readValue(String content, Class valueType) //將 JSON 字符串反序列化為指定類型的 Java 對(duì)象。
6、writeValueAsString(Object value) //將 Java 對(duì)象序列化為 JSON 字符串。
//以上的T可以是SerializationFeature 、DeserializationFeature 、JsonParser.Feature、JsonGenerator.Feature

二、在springboot中全局配置json格式化

通過(guò)創(chuàng)建配置類,注冊(cè)一個(gè)ObjectMapper并且通過(guò)序列化器將日期轉(zhuǎn)換為指定格式,將Long類型轉(zhuǎn)換為字符串類型,同時(shí)以下配置也解決了接口接收未知數(shù)參數(shù)不拋出異常的問(wèn)題,實(shí)際中大家可以復(fù)制下面代碼并且增加增加自己所需要的配置,其實(shí)相關(guān)json格式化的配置相當(dāng)多,大家有需要可以查詢?cè)创a中的配置參數(shù)

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

/**
 * json處理
 * @aphorism You are lucky to have someone to help you.No one to help you, is just fate.No one should do anything for you, because life is your own, you are responsible for yourself
 */
@Configuration
public class JacksonHandle {
    private static final String DEFAULT_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
    private static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";
    @Bean
    @Primary
    public ObjectMapper objectMapper(){
        ObjectMapper objectMapper = new ObjectMapper();
        //日期序列化器
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        //日期序列化
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));
        javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));
        javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));
        //日期反序列化
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));
        javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));
        javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));
        //反序列化-禁用在遇到未知屬性的時(shí)候拋出異常
        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        //注冊(cè)序列化器
        objectMapper.registerModule(javaTimeModule);
        //自定義序列化器
        SimpleModule module = new SimpleModule();
        //添加將long序列化為string
        module.addSerializer(Long.class, new ToStringSerializer());
        //注冊(cè)序列化器
        objectMapper.registerModule(module);
        return objectMapper;
    }
}

三、以下是我找到的一些具體配置的釋義,大家有需要可以參考

SerializationFeature配置參數(shù)

以下是序列化配置類SerializationFeature中的配置項(xiàng)的具體含義:
1. WRAP_ROOT_VALUE(false)
含義:如果序列化的Java對(duì)象是一個(gè)單一值(例如一個(gè)基本類型或字符串),則將其包裝在一個(gè)數(shù)組中。
默認(rèn)值:false
示例:如果序列化一個(gè)字符串 “hello”,默認(rèn)情況下輸出 “hello”;如果設(shè)置為 true,則輸出 [ “hello” ]。
2. INDENT_OUTPUT(false)
含義:是否對(duì)輸出的JSON進(jìn)行縮進(jìn)格式化,以提高可讀性。
默認(rèn)值:false
示例:如果設(shè)置為 true,輸出的JSON將會(huì)被格式化,例如 { “name”: “John” } 變?yōu)椋?/p>

  {
    "name": "John"
  }
  • FAIL_ON_EMPTY_BEANS(true)
    含義:當(dāng)序列化空的Java Bean時(shí)是否拋出異常。
    默認(rèn)值:false
    示例:如果序列化一個(gè)沒(méi)有字段的Java Bean,設(shè)置為 true 時(shí)會(huì)拋出異常。
  • FAIL_ON_SELF_REFERENCES(true)
    含義:當(dāng)序列化時(shí)遇到循環(huán)引用(即對(duì)象引用自身)是否拋出異常。
    默認(rèn)值:false
    示例:如果序列化一個(gè)包含自身引用的對(duì)象,設(shè)置為 true 時(shí)會(huì)拋出異常。
  • WRAP_EXCEPTIONS(true)
    含義:是否將所有異常包裝為JsonMappingException。
    默認(rèn)值:false
    示例:如果序列化過(guò)程中發(fā)生異常,默認(rèn)情況下會(huì)直接拋出原始異常;如果設(shè)置為 true,則會(huì)包裝為JsonMappingException。
  • FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS(true)
    含義:當(dāng)反序列化時(shí)遇到未包裝的類型標(biāo)識(shí)符是否拋出異常。
    默認(rèn)值:false
    示例:如果反序列化時(shí)遇到未包裝的類型標(biāo)識(shí)符,設(shè)置為 true 時(shí)會(huì)拋出異常。
  • WRITE_SELF_REFERENCES_AS_NULL(false)
    含義:當(dāng)序列化循環(huán)引用時(shí)是否將循環(huán)引用的對(duì)象序列化為null。
    默認(rèn)值:false
    示例:如果序列化一個(gè)包含自身引用的對(duì)象,設(shè)置為 true 時(shí)會(huì)將循環(huán)引用的部分序列化為 null。
  • CLOSE_CLOSEABLE(false)
    含義:序列化完成后是否關(guān)閉Closeable類型的對(duì)象。
    默認(rèn)值:false
    示例:如果序列化過(guò)程中使用了Closeable對(duì)象,設(shè)置為 true 時(shí)會(huì)在序列化完成后關(guān)閉這些對(duì)象。
  • FLUSH_AFTER_WRITE_VALUE(true)
    含義:每次序列化后是否立即刷新輸出流。
    默認(rèn)值:false
    示例:如果設(shè)置為 true,每次序列化完成后都會(huì)立即刷新輸出流。
  • WRITE_DATES_AS_TIMESTAMPS(true)
    含義:日期是否以時(shí)間戳形式序列化。
    默認(rèn)值:true
    示例:如果設(shè)置為 false,日期將以字符串形式序列化。
  • WRITE_DATE_KEYS_AS_TIMESTAMPS(false)
    含義:日期鍵是否以時(shí)間戳形式序列化。
    默認(rèn)值:false
    示例:如果設(shè)置為 true,日期鍵將以時(shí)間戳形式序列化。
  • WRITE_DATES_WITH_ZONE_ID(false)
    含義:日期是否包含時(shí)區(qū)信息。
    默認(rèn)值:false
    示例:如果設(shè)置為 true,日期序列化時(shí)會(huì)包含時(shí)區(qū)信息。
  • WRITE_DATES_WITH_CONTEXT_TIME_ZONE(true)
    含義:日期是否使用上下文中的時(shí)區(qū)進(jìn)行序列化。
    默認(rèn)值:true
    示例:如果設(shè)置為 false,日期將使用UTC時(shí)區(qū)進(jìn)行序列化。
  • WRITE_DURATIONS_AS_TIMESTAMPS(true)
    含義:持續(xù)時(shí)間是否以時(shí)間戳形式序列化。
    默認(rèn)值:true
    示例:如果設(shè)置為 false,持續(xù)時(shí)間將以字符串形式序列化。
  • WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS(false)
    含義:字符數(shù)組是否以JSON數(shù)組的形式序列化。
    默認(rèn)值:false
    示例:如果設(shè)置為 true,字符數(shù)組將以JSON數(shù)組的形式序列化。
  • WRITE_ENUMS_USING_TO_STRING(false)
    含義:枚舉值是否使用其toString()方法的結(jié)果進(jìn)行序列化。
    默認(rèn)值:false
    示例:如果設(shè)置為 true,枚舉值將以其toString()結(jié)果進(jìn)行序列化。
  • WRITE_ENUMS_USING_INDEX(false)
    含義:枚舉值是否使用其索引進(jìn)行序列化。
    默認(rèn)值:false
    示例:如果設(shè)置為 true,枚舉值將以其索引進(jìn)行序列化。
  • WRITE_ENUM_KEYS_USING_INDEX(false)
    含義:枚舉鍵是否使用其索引進(jìn)行序列化。
    默認(rèn)值:false
    示例:如果設(shè)置為 true,枚舉鍵將以其索引進(jìn)行序列化。

DeserializationFeature配置參數(shù)

  • USE_BIG_DECIMAL_FOR_FLOATS
    用途:當(dāng)序列化浮點(diǎn)數(shù)時(shí),是否使用 BigDecimal 類型。
    默認(rèn)值:false — 使用 double 類型。
  • USE_BIG_INTEGER_FOR_INTS
    用途:當(dāng)序列化整數(shù)時(shí),是否使用 BigInteger 類型。
    默認(rèn)值:false — 使用 long 類型。
  • USE_LONG_FOR_INTS
    用途:當(dāng)序列化整數(shù)時(shí),是否使用 long 類型。
    默認(rèn)值:false — 使用 int 類型。
  • USE_JAVA_ARRAY_FOR_JSON_ARRAY
    用途:當(dāng)序列化 JSON 數(shù)組時(shí),是否使用 Java 的數(shù)組類型。
    默認(rèn)值:false — 使用 JsonArray 類型。
  • FAIL_ON_UNKNOWN_PROPERTIES
    用途:當(dāng)遇到未知屬性時(shí)是否拋出異常。
    默認(rèn)值:true — 拋出異常。
  • FAIL_ON_NULL_FOR_PRIMITIVES
    用途:當(dāng)遇到原始類型的 null 值時(shí)是否拋出異常。
    默認(rèn)值:false — 不拋出異常。
  • FAIL_ON_NUMBERS_FOR_ENUMS
    用途:當(dāng)遇到枚舉類型的數(shù)字表示時(shí)是否拋出異常。
    默認(rèn)值:false — 不拋出異常。
  • FAIL_ON_INVALID_SUBTYPE
    用途:當(dāng)遇到無(wú)效子類型時(shí)是否拋出異常。
    默認(rèn)值:true — 拋出異常。
  • FAIL_ON_READING_DUP_TREE_KEY
    用途:當(dāng)讀取重復(fù)的樹鍵時(shí)是否拋出異常。
    默認(rèn)值:false — 不拋出異常。
  • FAIL_ON_IGNORED_PROPERTIES
    用途:當(dāng)遇到被忽略的屬性時(shí)是否拋出異常。
    默認(rèn)值:false — 不拋出異常。
  • FAIL_ON_UNRESOLVED_OBJECT_IDS
    用途:當(dāng)遇到未解決的對(duì)象 ID 時(shí)是否拋出異常。
    默認(rèn)值:true — 拋出異常。
  • FAIL_ON_MISSING_CREATOR_PROPERTIES
    用途:當(dāng)缺少構(gòu)造器屬性時(shí)是否拋出異常。
    默認(rèn)值:false — 不拋出異常。
  • FAIL_ON_NULL_CREATOR_PROPERTIES
    用途:當(dāng)構(gòu)造器屬性為 null 時(shí)是否拋出異常。
    默認(rèn)值:false — 不拋出異常。
  • FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY
    用途:當(dāng)缺少外部類型 ID 屬性時(shí)是否拋出異常。
    默認(rèn)值:true — 拋出異常。
  • FAIL_ON_TRAILING_TOKENS
    用途:當(dāng)遇到尾隨標(biāo)記時(shí)是否拋出異常。
    默認(rèn)值:false — 不拋出異常。
  • WRAP_EXCEPTIONS
    用途:是否包裝異常。
    默認(rèn)值:true — 包裝異常。
  • ACCEPT_SINGLE_VALUE_AS_ARRAY
    用途:是否接受單個(gè)值作為數(shù)組。
    默認(rèn)值:false — 不接受。
  • UNWRAP_SINGLE_VALUE_ARRAYS
    用途:是否解包單值數(shù)組。
    默認(rèn)值:false — 不解包。
  • UNWRAP_ROOT_VALUE
    用途:是否解包根值。
    默認(rèn)值:false — 不解包。
  • ACCEPT_EMPTY_STRING_AS_NULL_OBJECT
    用途:是否接受空字符串作為 null 對(duì)象。
    默認(rèn)值:false — 不接受。
  • ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT
    用途:是否接受空數(shù)組作為 null 對(duì)象。
    默認(rèn)值:false — 不接受。
  • ACCEPT_FLOAT_AS_INT
    用途:是否接受浮點(diǎn)數(shù)作為整數(shù)。
    默認(rèn)值:true — 接受。
  • READ_ENUMS_USING_TO_STRING
    用途:是否使用 toString() 方法讀取枚舉。
    默認(rèn)值:false — 不使用。
  • READ_UNKNOWN_ENUM_VALUES_AS_NULL
    用途:是否將未知枚舉值讀取為 null。
    默認(rèn)值:false — 不讀取為 null。
  • READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE
    用途:是否使用默認(rèn)值讀取未知枚舉值。
    默認(rèn)值:false — 不使用默認(rèn)值。
  • READ_DATE_TIMESTAMPS_AS_NANOSECONDS
    用途:是否將日期時(shí)間戳讀取為納秒。
    默認(rèn)值:true — 讀取為納秒。
  • ADJUST_DATES_TO_CONTEXT_TIME_ZONE
    用途:是否調(diào)整日期到上下文時(shí)區(qū)。
    默認(rèn)值:true — 調(diào)整。
  • EAGER_DESERIALIZER_FETCH
    用途:是否急切地獲取反序列化器。
    默認(rèn)值:true — 急切獲取。

到此這篇關(guān)于Springboot通過(guò)ObjectMapper配置json序列化詳解的文章就介紹到這了,更多相關(guān)Springboot ObjectMapper配置json序列化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 解決Maven項(xiàng)目pom.xml導(dǎo)入了Junit包還是用不了@Test注解問(wèn)題

    解決Maven項(xiàng)目pom.xml導(dǎo)入了Junit包還是用不了@Test注解問(wèn)題

    在Maven項(xiàng)目中,如果在非test目錄下使用@Test注解,可能會(huì)因?yàn)閜om.xml中<scope>test</scope>的設(shè)置而無(wú)法使用,正確做法是將測(cè)試代碼放在src/test/java目錄下,或去除<scope>test</scope>限制,這樣可以確保Junit依賴正確加載并應(yīng)用于適當(dāng)?shù)拇a部分
    2024-10-10
  • Java中CountDownLatch進(jìn)行多線程同步詳解及實(shí)例代碼

    Java中CountDownLatch進(jìn)行多線程同步詳解及實(shí)例代碼

    這篇文章主要介紹了Java中CountDownLatch進(jìn)行多線程同步詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • spring boot日志管理配置

    spring boot日志管理配置

    這篇文章主要介紹了spring boot日志管理配置的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • springboot與dubbo的版本匹配問(wèn)題

    springboot與dubbo的版本匹配問(wèn)題

    這篇文章主要介紹了springboot與dubbo的版本匹配問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 基于java實(shí)現(xiàn)畫圖板功能

    基于java實(shí)現(xiàn)畫圖板功能

    這篇文章主要為大家詳細(xì)介紹了基于java實(shí)現(xiàn)畫圖板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • springboot訪問(wèn)靜態(tài)資源遇到的坑及解決

    springboot訪問(wèn)靜態(tài)資源遇到的坑及解決

    這篇文章主要介紹了springboot訪問(wèn)靜態(tài)資源遇到的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 教你在JNA中將本地方法映射到JAVA代碼中的示例

    教你在JNA中將本地方法映射到JAVA代碼中的示例

    對(duì)于JNI來(lái)說(shuō),我們可以使用native關(guān)鍵字來(lái)定義本地方法。那么在JNA中有那些在JAVA代碼中定義本地方法的方式呢?對(duì)JNA本地方法映射JAVA代碼的相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-04-04
  • 詳細(xì)分析java 動(dòng)態(tài)代理

    詳細(xì)分析java 動(dòng)態(tài)代理

    這篇文章主要介紹了java 動(dòng)態(tài)代理的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java?Stream?的?Collectors.toMap高級(jí)應(yīng)用與最佳實(shí)踐

    Java?Stream?的?Collectors.toMap高級(jí)應(yīng)用與最佳實(shí)踐

    文章講解Java?Stream?API中Collectors.toMap的使用,涵蓋基礎(chǔ)語(yǔ)法、鍵沖突處理、自定義Map類型、null值安全、復(fù)雜值轉(zhuǎn)換及性能優(yōu)化等場(chǎng)景,本文將從基礎(chǔ)用法入手,逐步深入探討其高級(jí)應(yīng)用與最佳實(shí)踐,感興趣的朋友一起看看吧
    2025-08-08
  • Java二叉樹查詢?cè)砩钊敕治鲋v解

    Java二叉樹查詢?cè)砩钊敕治鲋v解

    這篇文章主要介紹了Java二叉樹查詢?cè)?,二叉查找樹,又稱二叉排序樹,亦稱二叉搜索樹,是數(shù)據(jù)結(jié)構(gòu)中的一類。在一般情況下,查找效率比鏈表結(jié)構(gòu)要高
    2022-11-11

最新評(píng)論

运城市| 南投县| 东台市| 涞水县| 克山县| 三门县| 山东省| 鄂尔多斯市| 萝北县| 石家庄市| 永嘉县| 社旗县| 海城市| 图们市| 牙克石市| 太谷县| 青神县| 闽侯县| 大厂| 巫溪县| 友谊县| 嘉黎县| 吉水县| 德令哈市| 华蓥市| 和龙市| 富民县| 兴宁市| 乌鲁木齐县| 绍兴市| 安化县| 酒泉市| 二连浩特市| 壶关县| 德昌县| 红桥区| 景德镇市| 和田市| 新巴尔虎右旗| 青龙| 壶关县|