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

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

SpringBoot自定義轉換器用法詳解

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

基本介紹

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

GenericConverter里面有一個內部類ConvertiblePair,自定義轉換器時他的兩個類型屬性需要我們去指定。

image-20230813120137532

image-20230813115316814

image-20230813120534010

自定義轉換器-應用實例

需求說明: 演示自定義轉換器使用

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/>
            <!-- 使用自定義轉換器關聯(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,增加自定義轉換器-

/**
 * @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 方法中,增加一個自定義的轉換器
                 * 2. 增加自定義轉換器 String -> Car
                 * 3. 增加的自定義轉換器會注冊到 converters 容器中
                 * 4. converters 底層結構是 ConcurrentHashMap 內置有124轉換器
                 * 5. 一會會使用debug來看到這些轉換器
                 */
				//使用匿名內部類添加
                registry.addConverter(new Converter<String, Car>() {
                    @Override
                    public Car convert(String source) {//source就是 傳入的字符串 避水獸,66666.6
                        //這里就加入你的自定義的轉換業(yè)務代碼
                        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

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

image-20230813145611896

注冊轉換器換種寫法-方便理解

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

@Configuration(proxyBeanMethods = false)
public class WebConfig  {
    //注入bean WebMvcConfigurer
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                //轉種寫法來注冊自定義轉換器-方便理解
                //1.先創(chuàng)建自定義的轉換器
                Converter<String,Car> hspConverter = new Converter<String, Car>() {
                    @Override
                    public Car convert(String source) {//source就是 傳入的字符串 避水金晶獸,666.6
                        //這里就加入你的自定義的轉換業(yè)務代碼
                        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添加轉換器到converters key-[源類型->目標類型]
                registry.addConverter(hspConverter);
            }
        };
    }
}

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

總結

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

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

相關文章

  • 一篇文章帶你認識Java8接口的默認方法

    一篇文章帶你認識Java8接口的默認方法

    這篇文章主要給大家介紹了如何通過一篇文章帶你認識Java8接口的默認方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java8具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • 簡單了解springboot eureka交流機制

    簡單了解springboot eureka交流機制

    這篇文章主要介紹了簡單了解springboot eureka交流機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • servlet異步請求的實現(xiàn)

    servlet異步請求的實現(xiàn)

    本文主要介紹了servlet異步請求的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • IDEA集成Gitee碼云的實現(xiàn)步驟

    IDEA集成Gitee碼云的實現(xiàn)步驟

    本文主要介紹了IDEA集成Gitee碼云的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Spring整合redis的操作代碼

    Spring整合redis的操作代碼

    這篇文章主要介紹了Spring整合redis的操作代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Java中的BufferedInputStream與BufferedOutputStream使用示例

    Java中的BufferedInputStream與BufferedOutputStream使用示例

    BufferedInputStream和BufferedOutputStream分別繼承于FilterInputStream和FilterOutputStream,代表著緩沖區(qū)的輸入輸出,這里我們就來看一下Java中的BufferedInputStream與BufferedOutputStream使用示例:
    2016-06-06
  • Java中使用instanceof判斷對象類型的示例

    Java中使用instanceof判斷對象類型的示例

    在List<Object>中遍歷Object時,先判斷類型,再定向轉換,本文給大家介紹Java中使用instanceof判斷對象類型,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • Java編程思想中關于并發(fā)的總結

    Java編程思想中關于并發(fā)的總結

    在本文中小編給大家整理的是關于Java編程思想中關于并發(fā)的總結以及相關實例內容,需要的朋友們參考下。
    2019-09-09
  • spring boot實現(xiàn)上傳圖片并在頁面上顯示及遇到的問題小結

    spring boot實現(xiàn)上傳圖片并在頁面上顯示及遇到的問題小結

    最近在使用spring boot搭建網站的過程之中遇到了有點小問題,最終解決方案是在main目錄下新建了一個webapp文件夾,并且對其路徑進行了配置,本文重點給大家介紹spring boot實現(xiàn)上傳圖片并在頁面上顯示功能,需要的朋友參考下吧
    2017-12-12
  • JDBC以反射機制加載類注冊驅動連接MySQL

    JDBC以反射機制加載類注冊驅動連接MySQL

    這篇文章介紹了JDBC以反射機制加載類注冊驅動連接MySQL的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論

启东市| 柏乡县| 巴东县| 察隅县| 大邑县| 鄄城县| 河池市| 高安市| 东乌珠穆沁旗| 田东县| 友谊县| 渭源县| 新昌县| 长阳| 灵璧县| 柯坪县| 武安市| 舞阳县| 江孜县| 衡水市| 启东市| 惠来县| 大化| 葫芦岛市| 余姚市| 广丰县| 海阳市| 岳阳市| 东乡| 苏尼特右旗| 兴国县| 聂荣县| 建水县| 勐海县| 大荔县| 集安市| 宁河县| 肥乡县| 灵武市| 汪清县| 漠河县|