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

Springboot通過ObjectMapper配置json序列化詳解

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

前言

Spring Boot 默認集成了 Jackson,ObjectMapper 是 Jackson 庫中的一個核心類,它是用于將 Java 對象轉換為 JSON 字符串,以及將 JSON 字符串轉換回 Java 對象的主要工具。主要用于將數(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)//注冊序列化器
5、readValue(String content, Class valueType) //將 JSON 字符串反序列化為指定類型的 Java 對象。
6、writeValueAsString(Object value) //將 Java 對象序列化為 JSON 字符串。
//以上的T可以是SerializationFeature 、DeserializationFeature 、JsonParser.Feature、JsonGenerator.Feature

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

通過創(chuàng)建配置類,注冊一個ObjectMapper并且通過序列化器將日期轉換為指定格式,將Long類型轉換為字符串類型,同時以下配置也解決了接口接收未知數(shù)參數(shù)不拋出異常的問題,實際中大家可以復制下面代碼并且增加增加自己所需要的配置,其實相關json格式化的配置相當多,大家有需要可以查詢源碼中的配置參數(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)));
        //反序列化-禁用在遇到未知屬性的時候拋出異常
        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        //注冊序列化器
        objectMapper.registerModule(javaTimeModule);
        //自定義序列化器
        SimpleModule module = new SimpleModule();
        //添加將long序列化為string
        module.addSerializer(Long.class, new ToStringSerializer());
        //注冊序列化器
        objectMapper.registerModule(module);
        return objectMapper;
    }
}

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

SerializationFeature配置參數(shù)

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

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

DeserializationFeature配置參數(shù)

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

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

相關文章

  • 解決Maven項目pom.xml導入了Junit包還是用不了@Test注解問題

    解決Maven項目pom.xml導入了Junit包還是用不了@Test注解問題

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

    Java中CountDownLatch進行多線程同步詳解及實例代碼

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

    spring boot日志管理配置

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

    springboot與dubbo的版本匹配問題

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

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

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

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

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

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

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

    詳細分析java 動態(tài)代理

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

    Java?Stream?的?Collectors.toMap高級應用與最佳實踐

    文章講解Java?Stream?API中Collectors.toMap的使用,涵蓋基礎語法、鍵沖突處理、自定義Map類型、null值安全、復雜值轉換及性能優(yōu)化等場景,本文將從基礎用法入手,逐步深入探討其高級應用與最佳實踐,感興趣的朋友一起看看吧
    2025-08-08
  • Java二叉樹查詢原理深入分析講解

    Java二叉樹查詢原理深入分析講解

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

最新評論

商南县| 崇礼县| 称多县| 连云港市| 淳安县| 苗栗市| 云阳县| 五河县| 盘锦市| 石家庄市| 岳阳县| 河津市| 河北区| 三亚市| 奉新县| 广平县| 云阳县| 抚远县| 凤城市| 西畴县| 始兴县| 文昌市| 牙克石市| 格尔木市| 大荔县| 扶沟县| 兴海县| 景德镇市| 康平县| 永兴县| 卢龙县| 静宁县| 安陆市| 格尔木市| 纳雍县| 介休市| 奉贤区| 平潭县| 衡水市| 邯郸市| 仲巴县|