如何使用SpringBoot自定義轉(zhuǎn)換器,需要的朋友可以參考下" />

亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot自定義轉(zhuǎn)換器用法詳解

 更新時間:2023年08月16日 09:45:02   作者:晨犀  
在SpringBoot中,轉(zhuǎn)換器用于將一個類型的值轉(zhuǎn)換為另一個類型,這在處理HTTP請求參數(shù)、響應(yīng)結(jié)果、表單數(shù)據(jù)等方面非常有用,SpringBoot提供了多種方式來定義和使用轉(zhuǎn)換器,本文給大家介紹了
如何使用SpringBoot自定義轉(zhuǎn)換器,需要的朋友可以參考下

基本介紹

  • SpringBoot 在響應(yīng)客戶端請求時,將提交的數(shù)據(jù)封裝成對象時,使用了內(nèi)置的轉(zhuǎn)換器
  • SpringBoot 也支持自定義轉(zhuǎn)換器, 這個內(nèi)置轉(zhuǎn)換器在debug 的時候, 可以看到 提供了124 個內(nèi)置轉(zhuǎn)換器.
  • 看下源碼GenericConverter-ConvertiblePair

GenericConverter里面有一個內(nèi)部類ConvertiblePair,自定義轉(zhuǎn)換器時他的兩個類型屬性需要我們?nèi)ブ付ā?/p>

image-20230813120137532

image-20230813115316814

image-20230813120534010

自定義轉(zhuǎn)換器-應(yīng)用實例

需求說明: 演示自定義轉(zhuǎn)換器使用

image-20230813121203863

代碼實現(xiàn)

修改save.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>添加妖怪</title>
    </head>
    <body>
        <h1>添加妖怪-坐騎[測試封裝POJO;]</h1>
        <form action="/savemonster" method="post">
            編號: <input name="id" value="100"><br/>
            姓名: <input name="name" value="牛魔王"/> <br/>
            年齡: <input name="age" value="500"/> <br/>
            婚否: <input name="isMarried" value="true"/> <br/>
            生日: <input name="birth" value="2000/11/11"/> <br/>
            <!-- 使用自定義轉(zhuǎn)換器關(guān)聯(lián)car, 字符串整體提交, 使用,號間隔  -->
            坐騎:<input name="car" value="避水獸,66666.6"><br/>
            <!--    坐騎:<input name="car.name" value="奔馳"/><br/>-->
            <!--    價格:<input name="car.price" value="9999.9"/>-->
            <input type="submit" value="保存"/>
        </form>
    </body>
</html>

創(chuàng)建src\main\java\com\nlc\web\config\WebConfig.java,增加自定義轉(zhuǎn)換器-

/**
 * @Configuration(proxyBeanMethods = false)
 * 1. 表示 WebConfig 是一個配置類
 * 2. proxyBeanMethods = false 使用Lite模式
 */
@Configuration(proxyBeanMethods = false)
public class WebConfig  {
    //注入bean WebMvcConfigurer
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                /**
                 * 解讀
                 * 1. 在addFormatters 方法中,增加一個自定義的轉(zhuǎn)換器
                 * 2. 增加自定義轉(zhuǎn)換器 String -> Car
                 * 3. 增加的自定義轉(zhuǎn)換器會注冊到 converters 容器中
                 * 4. converters 底層結(jié)構(gòu)是 ConcurrentHashMap 內(nèi)置有124轉(zhuǎn)換器
                 * 5. 一會會使用debug來看到這些轉(zhuǎn)換器
                 */
				//使用匿名內(nèi)部類添加
                registry.addConverter(new Converter<String, Car>() {
                    @Override
                    public Car convert(String source) {//source就是 傳入的字符串 避水獸,66666.6
                        //這里就加入你的自定義的轉(zhuǎn)換業(yè)務(wù)代碼
                        if (!ObjectUtils.isEmpty(source)) {
                            Car car = new Car();
                            String[] split = source.split(",");
                            car.setName(split[0]);
                            car.setPrice(Double.parseDouble(split[1]));
                            return car;
                        }
                        return null;
                    }
                });
            }
        };
    }
}

測試

完成測試, 瀏覽器http://localhost:8080/save.html

image-20230813121938460

image-20230813122026218

Debug 查看新增的Converter

image-20230813122138132

image-20230813122159910

image-20230813122229942

------注意看, 多了一個我們自定義的轉(zhuǎn)換器String->com.nlc.web.bean.Car

image-20230813145611896

注冊轉(zhuǎn)換器換種寫法-方便理解

如果上面的方法不好理解可以看看下面

@Configuration(proxyBeanMethods = false)
public class WebConfig  {
    //注入bean WebMvcConfigurer
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                //轉(zhuǎn)種寫法來注冊自定義轉(zhuǎn)換器-方便理解
                //1.先創(chuàng)建自定義的轉(zhuǎn)換器
                Converter<String,Car> hspConverter = new Converter<String, Car>() {
                    @Override
                    public Car convert(String source) {//source就是 傳入的字符串 避水金晶獸,666.6
                        //這里就加入你的自定義的轉(zhuǎn)換業(yè)務(wù)代碼
                        if (!ObjectUtils.isEmpty(source)) {
                            Car car = new Car();
                            String[] split = source.split(",");
                            car.setName(split[0]);
                            car.setPrice(Double.parseDouble(split[1]));
                            return car;
                        }
                        return null;
                    }
                };
                //2添加轉(zhuǎn)換器到converters key-[源類型->目標類型]
                registry.addConverter(hspConverter);
            }
        };
    }
}

也可以有多個轉(zhuǎn)換器,但是不能有相同的k,k是唯一的。如果有兩個相同的k,第二個會自動替換第一個。

總結(jié)

  • 轉(zhuǎn)換器是已k-v的形式存放,k是唯一的,如果有多個相同k的轉(zhuǎn)換器,會被下一個轉(zhuǎn)換器替代。
  • 自定義轉(zhuǎn)換器的業(yè)務(wù)代碼是由程序員決定。
  • 創(chuàng)建自定義轉(zhuǎn)換器后不要忘記添加轉(zhuǎn)換器到converters。

到此這篇關(guān)于SpringBoot自定義轉(zhuǎn)換器用法詳解的文章就介紹到這了,更多相關(guān)SpringBoot自定義轉(zhuǎn)換器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 中類似js encodeURIComponent 函數(shù)的實現(xiàn)案例

    java 中類似js encodeURIComponent 函數(shù)的實現(xiàn)案例

    這篇文章主要介紹了java 中類似js encodeURIComponent 函數(shù)的實現(xiàn)案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • jdk中密鑰和證書管理工具keytool常用命令詳解

    jdk中密鑰和證書管理工具keytool常用命令詳解

    keytool JAVA是個密鑰和證書管理工具。它使用戶能夠管理自己的公鑰/私鑰對及相關(guān)證書,用于(通過數(shù)字簽名)自我認證(用戶向別的用戶/服務(wù)認證自己)或數(shù)據(jù)完整性以及認證服務(wù)
    2014-01-01
  • Mybatis如何使用注解優(yōu)化代碼

    Mybatis如何使用注解優(yōu)化代碼

    這篇文章主要介紹了Mybatis如何使用注解優(yōu)化代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot整合Swagger2的步驟詳解

    SpringBoot整合Swagger2的步驟詳解

    這篇文章主要介紹了SpringBoot整合Swagger2的步驟詳解,幫助大家更好的理解和學習使用SpringBoot框架,感興趣的朋友可以了解下
    2021-04-04
  • HttpClient詳細使用示例詳解

    HttpClient詳細使用示例詳解

    這篇文章主要介紹了HttpClient詳細使用示例詳解,本文給大家介紹的非常想詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之前綴,中綴和后綴表達式

    帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之前綴,中綴和后綴表達式

    這篇文章主要為大家介紹了Java的前綴,中綴和后綴表達式 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • JSON中fastjson、jackson、gson如何選擇

    JSON中fastjson、jackson、gson如何選擇

    在Java中,JSON的解析方式很多,例如fastjson(阿里)、Gson(谷歌)、jackjson等,本文主要介紹了JSON中fastjson、jackson、gson如何選擇,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • 詳解Java的日期時間新特性

    詳解Java的日期時間新特性

    隨著時間的不斷推移,現(xiàn)實的需求也在不斷更新,原先的一些API已經(jīng)難以滿足開發(fā)需求了,從JDK?8之后,為了滿足更多的開發(fā)需求,Java給我們增加了不少關(guān)于日期時間的新特性,接下來就帶各位來看看這些新特性有哪些,需要的朋友可以參考下
    2023-06-06
  • Java線程實現(xiàn)的兩種方式解析

    Java線程實現(xiàn)的兩種方式解析

    這篇文章主要介紹了Java線程實現(xiàn)的兩種方式解析,注意在構(gòu)造器中啟動這個線程的話,很容易造成this逃逸的問題,這是要注意的,這是通過直接集成thread來成為線程,同時在這種情況下,你可以通過調(diào)用合適的方法來,需要的朋友可以參考下
    2024-01-01
  • 基于MockMvc進行springboot調(diào)試(SpringbootTest)

    基于MockMvc進行springboot調(diào)試(SpringbootTest)

    這篇文章主要介紹了基于MockMvc進行springboot調(diào)試(SpringbootTest),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10

最新評論