😀前言
本篇博文是關于SpringBoot 自定義轉換器的使用,希望你能夠喜歡😊
🏠個人主頁:晨犀主頁
🧑個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力😉😉
💕歡迎大家:這里是CSDN,我總結知識的地方,歡迎來到我的博客,感謝大家的觀看🥰
如果文章有什么需要改進的地方還請大佬不吝賜教 先在次感謝啦😊
文章目錄
- 自定義轉換器
- 基本介紹
- 自定義轉換器-應用實例
- 代碼實現
- 測試
- Debug 查看新增的Converter
- 注冊轉換器換種寫法-方便理解
- 😄總結
自定義轉換器
基本介紹
-
SpringBoot 在響應客戶端請求時,將提交的數據封裝成對象時,使用了內置的轉換器
-
SpringBoot
也支持自定義轉換器, 這個內置轉換器在debug 的時候, 可以看到 提供了124 個內置轉換器. -
看下源碼GenericConverter-ConvertiblePair
GenericConverter里面有一個內部類ConvertiblePair,自定義轉換器時他的兩個類型屬性需要我們去指定。
自定義轉換器-應用實例
需求說明: 演示自定義轉換器使用
代碼實現
- 修改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>
- 創建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
Debug 查看新增的Converter
------注意看, 多了一個我們自定義的轉換器String->com.nlc.web.bean.Car
注冊轉換器換種寫法-方便理解
如果上面的方法不好理解可以看看下面
@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,第二個會自動替換第一個。
😄總結
- 轉換器是已k-v的形式存放,k是唯一的,如果有多個相同k的轉換器,會被下一個轉換器替代。
- 自定義轉換器的業務代碼是由程序員決定。
- 創建自定義轉換器后不要忘記添加轉換器到converters。
文章到這里就結束了,如果有什么疑問的地方請指出,諸大佬們一起來評論區一起討論😁
希望能和諸大佬們一起努力,今后我們一起觀看感謝您的閱讀🍻
如果幫助到您不妨3連支持一下,創造不易您們的支持是我的動力🤞