国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Springboot Jackson 序列化與反序列化配置

這篇具有很好參考價(jià)值的文章主要介紹了Springboot Jackson 序列化與反序列化配置。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

可解決在使用默認(rèn)反序列化Jackson時(shí),LocalDateTime類型的請(qǐng)求參數(shù)反序列化失敗的問題文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-786490.html

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
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.core.convert.converter.Converter;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @author wzy wzynov@qq.com
 * @date 2023-12-14 08:21
 */
@Configuration
public class JacksonConfig {
    
    /**
     * 默認(rèn)日期時(shí)間格式
     */
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    /**
     * 默認(rèn)日期格式
     */
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    /**
     * 默認(rèn)時(shí)間格式
     */
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
    
    /**
     * LocalDate轉(zhuǎn)換器,用于轉(zhuǎn)換RequestParam和PathVariable參數(shù)
     */
    @Bean
    public Converter<String, LocalDate> localDateConverter() {
        return new Converter<String, LocalDate>() {
            @Override
            public LocalDate convert(String source) {
                return LocalDate.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT));
            }
        };
    }
    
    /**
     * LocalDateTime轉(zhuǎn)換器,用于轉(zhuǎn)換RequestParam和PathVariable參數(shù)
     */
    @Bean
    public Converter<String, LocalDateTime> localDateTimeConverter() {
        return new Converter<String, LocalDateTime>() {
            @Override
            public LocalDateTime convert(String source) {
                return LocalDate.parse(source, DateTimeFormatter.ofPattern(getPattern(source))).atStartOfDay();
            }
        };
    }
    
    private String getPattern(String source) {
        int length = source.length();
        if (length == DEFAULT_DATE_TIME_FORMAT.length()) return DEFAULT_DATE_TIME_FORMAT;
        if (length == DEFAULT_DATE_FORMAT.length()) return DEFAULT_DATE_FORMAT;
        throw new RuntimeException("請(qǐng)使用合適的日期格式。例如," + DEFAULT_DATE_TIME_FORMAT + "、" + DEFAULT_DATE_FORMAT);
    }
    
    /**
     * LocalTime轉(zhuǎn)換器,用于轉(zhuǎn)換RequestParam和PathVariable參數(shù)
     */
    @Bean
    public Converter<String, LocalTime> localTimeConverter() {
        return new Converter<String, LocalTime>() {
            @Override
            public LocalTime convert(String source) {
                return LocalTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT));
            }
        };
    }
    
    /**
     * Date轉(zhuǎn)換器,用于轉(zhuǎn)換RequestParam和PathVariable參數(shù)
     */
    @Bean
    public Converter<String, Date> dateConverter() {
        return new Converter<String, Date>() {
            @Override
            public Date convert(String source) {
                SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
                try {
                    return format.parse(source);
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
            }
        };
    }
    
    
    /**
     * Json序列化和反序列化轉(zhuǎn)換器,用于轉(zhuǎn)換Post請(qǐng)求體中的json以及將我們的對(duì)象序列化為返回響應(yīng)的json
     */
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        
        // LocalDateTime系列序列化和反序列化模塊,繼承自jsr310,我們?cè)谶@里修改了日期格式
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class,
                new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
        javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
        javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
        javaTimeModule.addDeserializer(LocalDateTime.class,
                new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
        javaTimeModule.addDeserializer(LocalDate.class,
                new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
        javaTimeModule.addDeserializer(LocalTime.class,
                new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
        
        
        // Date序列化和反序列化
        javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {
            @Override
            public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
                String formattedDate = formatter.format(date);
                jsonGenerator.writeString(formattedDate);
            }
        });
        javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {
            @Override
            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException,
                    JsonProcessingException {
                SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
                String date = jsonParser.getText();
                try {
                    return format.parse(date);
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        
        javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {
            @Override
            public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
                String formattedDate = formatter.format(date);
                jsonGenerator.writeString(formattedDate);
            }
        });
        javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {
            @Override
            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException,
                    JsonProcessingException {
                SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
                String date = jsonParser.getText();
                try {
                    return format.parse(date);
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        
        objectMapper.registerModule(javaTimeModule);
        return objectMapper;
    }
    
}

到了這里,關(guān)于Springboot Jackson 序列化與反序列化配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux】序列化與反序列化

    【Linux】序列化與反序列化

    目錄 前言 什么是應(yīng)用層? 再談\\\"協(xié)議\\\" ?什么是序列化和反序列化 網(wǎng)絡(luò)版計(jì)算器 整體流程實(shí)現(xiàn) Sock.hpp的實(shí)現(xiàn) TcpServer.hpp的實(shí)現(xiàn) Protocol.hpp的實(shí)現(xiàn) CalServer.cc的編寫 CalClient.cc的編寫 整體代碼 ? ????????本章是屬于TCP/UDP四層模型中的第一層 應(yīng)用層 相關(guān)的內(nèi)容。主要介紹了序列

    2024年02月10日
    瀏覽(19)
  • 4.4. 對(duì)象序列化與反序列化

    4.4. 對(duì)象序列化與反序列化

    在本節(jié)中,我們將詳細(xì)討論Java中的對(duì)象序列化與反序列化概念、使用方法以及實(shí)例。對(duì)象序列化是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為字節(jié)流的過(guò)程,而反序列化則相反,是將字節(jié)流恢復(fù)為對(duì)象的過(guò)程。 4.4.1 為什么需要對(duì)象序列化? 對(duì)象序列化的主要目的是為了在不同的系統(tǒng)間傳輸對(duì)

    2024年02月07日
    瀏覽(23)
  • Flutter筆記:序列化與反序列化

    Flutter筆記 序列化與反序列化 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 郵箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/133340592 序列化是一種將復(fù)雜數(shù)據(jù)結(jié)構(gòu)(例如對(duì)象、數(shù)組、字典等)轉(zhuǎn)換為線性格式或字節(jié)流的過(guò)程,以便于數(shù)據(jù)的存儲(chǔ)

    2024年02月07日
    瀏覽(15)
  • jackson自定義序列化反序列化

    自定義序列化 序列化主要作用在返回?cái)?shù)據(jù)的時(shí)候 以BigDecimal統(tǒng)一返回3位小數(shù)為例 自定義序列化處理類 繼承jackson的 JsonSerializer 類,重寫 serialize 方法 使用的時(shí)候,可以直接使用Jackson的 @JsonSerialize 注解 自定義反序列化 接收前端傳入數(shù)據(jù) 繼承 JsonDeserializer 類,重寫 deserializ

    2024年02月13日
    瀏覽(23)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】序列化與反序列化

    【計(jì)算機(jī)網(wǎng)絡(luò)】序列化與反序列化

    通過(guò)打包的方式,將結(jié)構(gòu)體message發(fā)送給對(duì)方 對(duì)方收到后就會(huì)報(bào)告給上層QQ客戶端 結(jié)構(gòu)化的數(shù)據(jù) 是由 多個(gè) string 構(gòu)成的 而以前在網(wǎng)絡(luò)套接字 發(fā)送時(shí),都是按照一個(gè)字符串的方式來(lái)發(fā)送和接收的 所以想辦法 ,把多個(gè)字符串 轉(zhuǎn)化為 一個(gè)大\\\"字符串\\\",對(duì)方在接收時(shí)也是一個(gè)長(zhǎng)的

    2024年02月10日
    瀏覽(25)
  • 【Java 基礎(chǔ)篇】Java序列化與反序列化詳解

    在Java中,序列化和反序列化是一種將對(duì)象轉(zhuǎn)換為字節(jié)流和將字節(jié)流轉(zhuǎn)換為對(duì)象的機(jī)制。通過(guò)序列化,可以將對(duì)象存儲(chǔ)到文件中、傳輸?shù)骄W(wǎng)絡(luò)上,或者在分布式系統(tǒng)中進(jìn)行對(duì)象的傳遞。本文將詳細(xì)介紹Java序列化和反序列化的原理、使用方法和常見應(yīng)用場(chǎng)景,并提供一些示例代

    2024年02月09日
    瀏覽(24)
  • 【網(wǎng)絡(luò)編程】協(xié)議定制+Json序列化與反序列化

    【網(wǎng)絡(luò)編程】協(xié)議定制+Json序列化與反序列化

    需要云服務(wù)器等云產(chǎn)品來(lái)學(xué)習(xí)Linux的同學(xué)可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶首次下單享超低折扣。 ? 目錄 一、序列化與反序列化的概念 二、自定義協(xié)議設(shè)計(jì)一個(gè)網(wǎng)絡(luò)計(jì)算器 2.1TCP協(xié)議,如何保證接收方收到了完整的報(bào)文呢?

    2024年02月06日
    瀏覽(25)
  • JSON序列化與反序列化NULL值丟失問題

    做項(xiàng)目一般都會(huì)有一些特殊的需求,例如保留json中的null值,但是fastjson都會(huì)把null值得屬性給過(guò)濾掉 json序列化保留null值 json反序列化保留null值 使用hutool的Json工具時(shí)

    2024年02月15日
    瀏覽(37)
  • 使用nlohmann json庫(kù)進(jìn)行序列化與反序列化

    nlohmann源碼倉(cāng)庫(kù):https://github.com/nlohmann/json 使用方式:將其nlohmann文件夾加入,包含其頭文件json.hpp即可 demo

    2024年02月10日
    瀏覽(21)
  • Java安全基礎(chǔ)之Java序列化與反序列化

    目錄 ObjectInputStream 和 ObjectOutputStream java.io.Serializable 自定義序列化和反序列化 Java 的序列化(Serialization)是指將對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程,而反序列化(Deserialization)則是將字節(jié)序列轉(zhuǎn)換回對(duì)象的過(guò)程。 序列化和反序列化通常用于在網(wǎng)絡(luò)上傳輸對(duì)象或者將對(duì)象持久化到文

    2024年04月22日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包