如何使用SpringBoot 自定義轉換器

😀前言
本篇博文是關于SpringBoot 自定義轉換器的使用,希望你能夠喜歡😊

🏠個人主頁:晨犀主頁
🧑個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力😉😉
💕歡迎大家:這里是CSDN,我總結知識的地方,歡迎來到我的博客,感謝大家的觀看🥰
如果文章有什么需要改進的地方還請大佬不吝賜教 先在次感謝啦😊

文章目錄

  • 自定義轉換器
    • 基本介紹
    • 自定義轉換器-應用實例
      • 代碼實現
      • 測試
      • Debug 查看新增的Converter
      • 注冊轉換器換種寫法-方便理解
    • 😄總結

自定義轉換器

基本介紹

  1. SpringBoot 在響應客戶端請求時,將提交的數據封裝成對象時,使用了內置的轉換器

  2. SpringBoot 也支持自定義轉換器, 這個內置轉換器在debug 的時候, 可以看到 提供了124 個內置轉換器.

  3. 看下源碼GenericConverter-ConvertiblePair

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

  1. image-20230813120137532

image-20230813115316814

image-20230813120534010

自定義轉換器-應用實例

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

image-20230813121203863

代碼實現

  1. 修改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/><!-- 使用自定義轉換器關聯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>
  1. 創建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@Beanpublic WebMvcConfigurer webMvcConfigurer() {return new WebMvcConfigurer() {@Overridepublic void addFormatters(FormatterRegistry registry) {/*** 解讀* 1. 在addFormatters 方法中,增加一個自定義的轉換器* 2. 增加自定義轉換器 String -> Car* 3. 增加的自定義轉換器會注冊到 converters 容器中* 4. converters 底層結構是 ConcurrentHashMap 內置有124轉換器* 5. 一會會使用debug來看到這些轉換器*///使用匿名內部類添加registry.addConverter(new Converter<String, Car>() {@Overridepublic Car convert(String source) {//source就是 傳入的字符串 避水獸,66666.6//這里就加入你的自定義的轉換業務代碼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@Beanpublic WebMvcConfigurer webMvcConfigurer() {return new WebMvcConfigurer() {@Overridepublic void addFormatters(FormatterRegistry registry) {//轉種寫法來注冊自定義轉換器-方便理解//1.先創建自定義的轉換器Converter<String,Car> hspConverter = new Converter<String, Car>() {@Overridepublic Car convert(String source) {//source就是 傳入的字符串 避水金晶獸,666.6//這里就加入你的自定義的轉換業務代碼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,第二個會自動替換第一個。

😄總結

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

文章到這里就結束了,如果有什么疑問的地方請指出,諸大佬們一起來評論區一起討論😁
希望能和諸大佬們一起努力,今后我們一起觀看感謝您的閱讀🍻
如果幫助到您不妨3連支持一下,創造不易您們的支持是我的動力🤞

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42096.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42096.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42096.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

02-前端基礎第二天-HTML5

01-HTML標簽&#xff08;下&#xff09;導讀 目標&#xff1a; 能夠書寫表格能夠寫出無序列表能夠寫出3~4個常用input表單類型能夠寫出下拉列表表單能夠使用表單元素實現注冊頁面能夠獨立查閱W3C文檔 目錄&#xff1a; 表格標簽列表標簽表單標簽綜合案例查閱文檔 02-表格標…

Nginx搭建本地服務器,無需購買服務器即可測試vue項目打包后的效果

一.前言 本文是在windows環境&#xff08;Linux環境下其實也大同小異&#xff09;下基于Nginx實現搭建本地服務器&#xff0c;手把手教你部署vue項目。 二.Nginx入門 1&#xff09;下載安裝 進入Nginx官網下載&#xff0c;選擇stable版本下的windows版本下載即可 2&#xff09;…

Ubuntu 20.04配置靜態ip

ip配置文件 cd /etc/netplan配置 根據需求增加 # Let NetworkManager manage all devices on this system network:version: 2renderer: NetworkManager # 管理 不是必須ethernets:enp4s0: #網卡名dhcp4: no #關閉ipv4動態分配ip地址dhcp6: no #關閉ipv6動態分配…

Arrays.asList() 返回的list不能add,remove

一.Arrays.asList() 返回的list不能add,remove Arrays.asList()返回的是List,而且是一個定長的List&#xff0c;所以不能轉換為ArrayList&#xff0c;只能轉換為AbstractList 原因在于asList()方法返回的是某個數組的列表形式,返回的列表只是數組的另一個視圖,而數組本身并沒…

Wireshark 抓包過濾命令匯總

Wireshark 抓包過濾命令匯總 Wireshark 是一個強大的網絡分析工具&#xff0c;它可以幫助網絡管理員和安全專家監控和分析網絡流量。通過捕獲網絡數據包&#xff0c;Wireshark 能夠幫助我們識別網絡中的問題、瓶頸以及潛在的安全威脅。在使用 Wireshark 進行網絡數據包分析時&…

SQL Server基礎之游標

一&#xff1a;認識游標 游標是SQL Server的一種數據訪問機制&#xff0c;它允許用戶訪問單獨的數據行。用戶可以對每一行進行單獨的處理&#xff0c;從而降低系統開銷和潛在的阻隔情況&#xff0c;用戶也可以使用這些數據生成的SQL代碼并立即執行或輸出。 1.游標的概念 游標是…

DELL PowerEdge R720XD 磁盤RAID及Hot Spare熱備盤配置

一臺DELL PowerEdge R720XD服務器&#xff0c;需進行磁盤RAID及Hot Spare熱備盤配置&#xff0c;本文記錄配置過程示例。 一、設備環境 服務器型號&#xff1a;DELL PowerEdge R720XD 硬盤配置&#xff1a;800G硬盤共24塊 二、配置計劃 1、當前狀態&#xff1a;2塊盤配置RAID…

AIGC+游戲:一個被忽視的長賽道

&#xff08;圖片來源&#xff1a;Pixels&#xff09; AIGC徹底變革了游戲&#xff0c;但還不夠。 數科星球原創 作者丨苑晶 編輯丨大兔 消費還沒徹底復蘇&#xff0c;游戲卻已經出現拐點。 在游戲熱度猛增的背后&#xff0c;除了版號的利好因素外&#xff0c;AIGC技術的廣泛…

js下載后端返回的文件

文件流下載 后端返回文件流形式&#xff0c;前端下載 // res 為請求返回的數據對象const file_data res.data // 后端返回的文件流const blob new Blob([file_data]) const href window.URL.createObjectURL(blob) // 創建下載的鏈接 const file_name decodeURI(res.header…

4. 軟件開發的環境搭建

目錄 1. 搭建環境 1.1 檢查 JDK 1.2 檢查 MySQL 數據庫 1.3 檢查 Maven 1.4 檢查 GITEEGIT 1.5 安裝插件 1.5.1 安裝 Spring Boot Helper 1.5.2 安裝 lombok 1.6 創建倉庫 1.6.1 登錄 GITEE 創建倉庫并復制倉庫地址 1.6.2 克隆到本地 1.7 創建工程 1.7.1 設置編碼…

【Spring】Bean的實例化

1、簡介 在容器中的Bean要實例化為對象有三種方式 1、構造方法 2、靜態工廠 3、實例工廠 4、實現工廠接口 2、構造方法 構造方法實例化Bean即是直接通過構造方法創建對象 <bean id"bookDao" class"com.wn.spring.dao.impl.BookDaoImpl"/> 當不存在…

怎么把pdf壓縮到5m以內?壓縮辦法非常多

怎么把pdf壓縮到5m以內&#xff1f;PDF文件是我們辦公過程中較為常用的文件格式&#xff0c;PDF文件所包含的內容通常較多&#xff0c;比如文本、圖像以及音視頻等等。這樣的話&#xff0c;PDF文件占用內存也較大。如果需要對PDF文件進行使用、傳輸、分享等的話&#xff0c;可能…

單片機之從C語言基礎到專家編程 - 4 C語言基礎 - 4.8 運算符

1.算術運算符 運算符名稱備注加法運算符雙目運算&#xff0c;a b-減法運算符雙目運算&#xff0c;a - b*乘法運算符雙目運算&#xff0c;a * b/除法運算符雙目運算&#xff0c;a / b%求余運算符雙目運算, a % b自增運算符單目運算, a–自減運算符單目運算, a– 2.關系運算符…

Vue2集成Echarts實現可視化圖表

一、依賴配置 1、引入echarts相關依賴 也可以卸載原有的&#xff0c;重新安裝 卸載&#xff1a;npm uninstall echarts --save 安裝&#xff1a;npm install echarts4.8.0 --save 引入水球圖形依賴 npm install echarts-liquidfill2.0.2 --save 水球圖可參考文檔&#xff1…

MySQL索引(Index)

Index 數據庫中的索引&#xff08;Index&#xff09;是一種數據結構&#xff0c;用于提高數據庫查詢性能和加速數據檢索過程。索引可以看作是數據庫表中某個或多個列的數據結構&#xff0c;類似于書中的目錄&#xff0c;可以幫助數據庫管理系統更快地定位和訪問數據。它們是數…

Linux——KVM虛擬化

目錄標題 虛擬化技術虛擬化技術發展案例KVM簡介KVM架構及原理KVM原理KVM虛擬化架構/三種模式虛擬化前、虛擬化后對比KVM蓋中蓋套娃實驗 虛擬化技術 通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機&#xff0c;在一臺計算機上同時運行多個邏輯計算機&#xff0c;同時每個邏輯…

智安網絡|零信任安全框架:保障數字化時代網絡安全的最佳實踐

隨著數字化時代的快速發展&#xff0c;網絡安全問題變得越來越突出。傳統的安全防御模式已經不再適用于現代復雜的網絡環境中。為了應對日益增長的網絡威脅&#xff0c;零信任安全模式應運而生。 一、什么是零信任&#xff1f; 零信任是一種安全框架和哲學&#xff0c;它基于…

pytest的fixture梳理

fixture特性 夾具是在測試中用于提供共享資源、設置測試環境或模擬行為的工具。 1. 可以重復使用&#xff0c;多個用例可以使用同一個fixture 2. 一個測試用例可以使用多個裝置 import pytest # Arrange pytest.fixture def first_entry():return "a"# Arrange pyt…

全新 – Amazon EC2 M1 Mac 實例

去年&#xff0c;在 re: Invent 2021 大會期間&#xff0c;我寫了一篇博客文章&#xff0c;宣布推出 EC2 M1 Mac 實例的預覽版。我知道你們當中許多人請求訪問預覽版&#xff0c;我們盡了最大努力&#xff0c;卻無法讓所有人滿意。不過&#xff0c;大家現在已經無需等待了。我很…

postmarketOS

主步驟 #以下全程插入usb線 fastboot devices fastboot getvar all fastboot erase userdata fastboot erase system fastboot erase cachepmbootstrap init pmbootstrap installpmbootstrap flasher flash_rootfs --partition userdata pmbootstrap flasher flash_kernel…