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

Spring項(xiàng)目中如何自定義序列化工具

 更新時(shí)間:2024年12月12日 15:49:51   作者:vampire-wpre  
這篇文章主要為大家詳細(xì)介紹了Spring項(xiàng)目中自定義序列化工具的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在編寫web項(xiàng)目的場(chǎng)景下:

序列化:服務(wù)器端處理完業(yè)務(wù)邏輯后,需要將數(shù)據(jù)(如對(duì)象)轉(zhuǎn)換為客戶端能夠理解的格式(通常是JSON),這個(gè)過程就是序列化。序列化后的數(shù)據(jù)可以通過HTTP響應(yīng)發(fā)送給客戶端。

反序列化:客戶端接收到服務(wù)器的響應(yīng)后,需要將這些數(shù)據(jù)(通常是JSON或XML格式的字符串)轉(zhuǎn)換回客戶端程序能夠處理的對(duì)象,這個(gè)過程就是反序列化。

使用案例

所有的序列化和反序列化都是基于ObjectMapper的,序列化調(diào)用writeValue方法(如果是json數(shù)據(jù),使用writeValueAsString),反序列化調(diào)用readValue
編寫測(cè)試類

@SpringBootTest
public class JacksonTest {
    @Test
    void jacksonTest() {
        //定義ObjectMapper(所有的序列化和反序列化都是基于ObjectMapper)
        ObjectMapper objectMapper = new ObjectMapper();

        CommonResult<String> result = CommonResult.error(500, "系統(tǒng)錯(cuò)誤");
        String str;

        //序列化,把對(duì)象序列化成String
        //其實(shí)就是把對(duì)象轉(zhuǎn)成json字符串
        try {
            str = objectMapper.writeValueAsString(result);
            System.out.println(str);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
        //反序列化(就是把json字符串轉(zhuǎn)換成對(duì)象)
        CommonResult<String> commonResult = null;//參數(shù)2:要轉(zhuǎn)換成的對(duì)象
        try {
            commonResult = objectMapper.readValue(str,
                                                  CommonResult.class);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
        System.out.println(commonResult.getCode() + "," + commonResult.getMsg());
        //List序列化
        //定義List對(duì)象
        List<CommonResult<String>> commonResults = Arrays.asList(CommonResult.success("success1"),
                                                                 CommonResult.success("success2"));

        try {
            str = objectMapper.writeValueAsString(commonResults);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }

        //List反序列化
        JavaType javaType = objectMapper.
            getTypeFactory().//獲取類型工廠
            constructParametricType(List.class, CommonResult.class);//構(gòu)造List的類型,List<CommonResult<String>>

        try {
            commonResults = objectMapper.readValue(str, javaType);
            for (CommonResult<String> results : commonResults) {
                System.out.println(results.getData());
            }

        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }

    }

}

自定義序列化工具

在使用案例中,我們發(fā)現(xiàn)在代碼中出現(xiàn)了很多try catch,這樣顯得代碼很不雅觀,我們可以借鑒SpringBoot的方法,具體的操作看代碼

public class JacksonUtil {
    private JacksonUtil() {

    }
    
	//對(duì)ObjectMapper進(jìn)行單例化操作
    private final static ObjectMapper OBJECT_MAPPER;

    static {
        //初始化OBJECT_MAPPER
        OBJECT_MAPPER = new ObjectMapper();
    }
    
	//get方法
    private static ObjectMapper getObjectMapper() {
        return OBJECT_MAPPER;
    }

    private static <T> T tryParse(Callable<T> parser) {
        return tryParse(parser, JacksonException.class);
    }

    //借鑒SpringBoot統(tǒng)一異常
    //Callable<T> parser,這個(gè)參數(shù),支持我們使用lambda表達(dá)式進(jìn)行處理
    private static <T> T tryParse(Callable<T> parser, Class<? extends Exception> check) {
        try {
            return parser.call();
        } catch (Exception var4) {
            Exception ex = var4;
            if (check.isAssignableFrom(ex.getClass())) {
                throw new JsonParseException(ex);
            }
            throw new IllegalStateException(ex);
        }
    }


    /**
     * 序列化方法
     *
     * @param o
     * @return
     */
    public static String writeValueAsString(Object o) {
        return JacksonUtil.tryParse(() -> {
            //執(zhí)行序列化的操作
            //如果此處出現(xiàn)異常,直接會(huì)在tryParse這里捕獲
            return JacksonUtil.getObjectMapper().writeValueAsString(o);
        });
    }


    /**
     * 反序列化Object方法
     *
     * @param content
     * @param valueType
     * @param <T>
     * @return
     */
    public static <T> T readValue(String content, Class<T> valueType) {
        return JacksonUtil.tryParse(() -> {
            return JacksonUtil.getObjectMapper().readValue(content, valueType);
        });
    }

    /**
     * 反序列化List
     *
     * @param content
     * @param paramClasses
     * @param <T>
     * @return
     */
    public static <T> T readListValue(String content, Class<?> paramClasses) {

        //1.構(gòu)造JavaType
        JavaType javaType = JacksonUtil.getObjectMapper().
                getTypeFactory().//獲取類型工廠
                        constructParametricType(List.class, paramClasses);//構(gòu)造List的類型

        //2.反序列化
        return JacksonUtil.tryParse(() -> {
            return JacksonUtil.getObjectMapper().readValue(content, javaType);
        });

    }

}

到此這篇關(guān)于Spring項(xiàng)目中如何自定義序列化工具的文章就介紹到這了,更多相關(guān)Spring自定義序列化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 分析JVM的組成結(jié)構(gòu)

    分析JVM的組成結(jié)構(gòu)

    JVM(虛擬機(jī)):指以軟件的方式模擬具有完整硬件系統(tǒng)功能、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng) ,是物理機(jī)的軟件實(shí)現(xiàn)。JVM和VMware,Virtual Box等虛擬機(jī)一樣,都是運(yùn)行在操作系統(tǒng)之上的計(jì)算機(jī)系統(tǒng)
    2021-06-06
  • 詳解SpringBoot中的統(tǒng)一異常處理

    詳解SpringBoot中的統(tǒng)一異常處理

    這篇文章主要介紹了詳解SpringBoot中的統(tǒng)一異常處理,在獨(dú)立的某個(gè)地方,比如單獨(dú)一個(gè)類,定義一套對(duì)各種異常的處理機(jī)制,需要的朋友可以參考下
    2023-05-05
  • 在webservice里調(diào)用耗時(shí)方法出錯(cuò)的解決方案

    在webservice里調(diào)用耗時(shí)方法出錯(cuò)的解決方案

    這篇文章主要介紹了在webservice里調(diào)用耗時(shí)方法出錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • elasticsearch?java客戶端action的實(shí)現(xiàn)簡(jiǎn)單分析

    elasticsearch?java客戶端action的實(shí)現(xiàn)簡(jiǎn)單分析

    這篇文章主要為大家介紹了elasticsearch?java客戶端action的實(shí)現(xiàn)簡(jiǎn)單分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Spring?MVC啟動(dòng)之HandlerMapping作用及實(shí)現(xiàn)詳解

    Spring?MVC啟動(dòng)之HandlerMapping作用及實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Spring?MVC啟動(dòng)之HandlerMapping作用及實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Java 實(shí)現(xiàn)協(xié)程的方法

    Java 實(shí)現(xiàn)協(xié)程的方法

    這篇文章主要介紹了Java 實(shí)現(xiàn)協(xié)程的方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-10-10
  • intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程詳解

    intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程詳解

    這篇文章主要介紹了intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring Cloud Feign內(nèi)部實(shí)現(xiàn)代碼細(xì)節(jié)

    Spring Cloud Feign內(nèi)部實(shí)現(xiàn)代碼細(xì)節(jié)

    Feign 的英文表意為“假裝,偽裝,變形”, 是一個(gè)http請(qǐng)求調(diào)用的輕量級(jí)框架,可以以Java接口注解的方式調(diào)用Http請(qǐng)求,而不用像Java中通過封裝HTTP請(qǐng)求報(bào)文的方式直接調(diào)用。接下來通過本文給大家分享Spring Cloud Feign內(nèi)部實(shí)現(xiàn)代碼細(xì)節(jié),感興趣的朋友一起看看吧
    2021-05-05
  • SpringBoot整合Lombok及常見問題解決

    SpringBoot整合Lombok及常見問題解決

    本文主要介紹了SpringBoot整合Lombok及常見問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Spring中Bean的作用域和自動(dòng)裝配方式

    Spring中Bean的作用域和自動(dòng)裝配方式

    這篇文章主要介紹了Spring中Bean的作用域和自動(dòng)裝配方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論

务川| 宜宾县| 大新县| 马尔康县| 吉隆县| 通渭县| 达孜县| 阜阳市| 民丰县| 丹江口市| 宽城| 涿鹿县| 衡南县| 松桃| 东台市| 禹州市| 青河县| 三江| 易门县| 察隅县| 富民县| 边坝县| 安西县| 苏尼特左旗| 固阳县| 泾阳县| 江津市| 广饶县| 临沂市| 桐乡市| 桐梓县| 武义县| 固原市| 晋江市| 双城市| 武汉市| 巴塘县| 泾川县| 任丘市| 抚松县| 内江市|