<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot中的Converter解密,強(qiáng)大!

          共 3616字,需瀏覽 8分鐘

           ·

          2022-01-15 15:55

          大家好,我是路人,這是 SpringMVC 系列第 30 篇。

          本文將講解 Spring 中的另外一個(gè)知識(shí)點(diǎn):SpringMVC 中轉(zhuǎn)換器Converter的使用。

          好陌生啊,這玩意是干啥的呢?請(qǐng)往下看。

          1、來(lái)看一個(gè)需求

          如下,有一個(gè) UserDto 類(lèi),表示用戶(hù)信息

          public?class?UserDto?{
          ????//用戶(hù)名
          ????private?String?name;
          ????//年齡
          ????private?Integer?age;

          ????//省略getter、setter方法
          }

          要求后臺(tái)所有接口接受UserDto數(shù)據(jù)時(shí),參數(shù)的值格式為:name,age,比如下面接口

          @RequestMapping("/convert/test1")
          public?UserDto?test1(@RequestParam("user")?UserDto?user)?{
          ????System.out.println("name:"?+?user.getName());
          ????System.out.println("age:"?+?user.getAge());
          ????return?user;
          }

          能夠接受的請(qǐng)格式:/convert/test1?user=ready,1,這種需求如何實(shí)現(xiàn)呢?

          2、需用 Converter 接口來(lái)實(shí)現(xiàn)

          SpringMVC 中為我們提供的另外一個(gè)接口org.springframework.core.convert.converter.Converter,這個(gè)接口用來(lái)將一種類(lèi)型轉(zhuǎn)換為另一種類(lèi)型,看看其源碼如下,調(diào)用后端接口的時(shí)候,http 傳遞的參數(shù)都是字符串類(lèi)型的,但是后端卻可以使用 Integer、Double 等其他類(lèi)型來(lái)接收,這就是Converter實(shí)現(xiàn)的。

          @FunctionalInterface
          public?interface?Converter<S,?T>?{

          ?/**
          ??*?將source轉(zhuǎn)換為目標(biāo)T類(lèi)型
          ??*/

          ?@Nullable
          ?T?convert(S?source);
          }

          Spring 內(nèi)部提供了很多默認(rèn)的實(shí)現(xiàn),用于各種類(lèi)型轉(zhuǎn)換

          實(shí)現(xiàn)開(kāi)頭的需求,需要我們自定義一個(gè) Converter,將其添加到 SpringMVC 轉(zhuǎn)換器列表中,他負(fù)責(zé)將 String 類(lèi)型轉(zhuǎn)換為 UserDto 類(lèi)型。下面來(lái)看具體代碼實(shí)現(xiàn)

          3、代碼實(shí)現(xiàn)

          • 代碼如下,添加一個(gè)配置類(lèi),實(shí)現(xiàn)WebMvcConfigurer接口
          • 重寫(xiě)addFormatters方法,在這個(gè)方法中添加一個(gè)自定義的Converter,實(shí)現(xiàn)其 convert 方法,將name,age格式的字符串轉(zhuǎn)換為 UserDto 對(duì)象返回
          @Configuration
          public?class?MvcConfig?implements?WebMvcConfigurer?{

          ????@Override
          ????public?void?addFormatters(FormatterRegistry?registry)?{
          ????????registry.addConverter(new?Converter()?{
          ????????????@Override
          ????????????public?UserDto?convert(String?source)?{
          ????????????????if?(source?==?null)?{
          ????????????????????return?null;
          ????????????????}
          ????????????????String[]?split?=?source.split(",");
          ????????????????String?name?=?split[0];
          ????????????????Integer?age?=?Integer.valueOf(split[1]);
          ????????????????return?new?UserDto(name,?age);
          ????????????}
          ????????});
          ????}
          }

          接口代碼

          @RestController
          public?class?ConverterTestController?{

          ????@RequestMapping("/convert/test1")
          ????public?UserDto?test1(@RequestParam("user")?UserDto?user)?{
          ????????System.out.println("name:"?+?user.getName());
          ????????System.out.println("age:"?+?user.getAge());
          ????????return?user;
          ????}

          }

          訪問(wèn)請(qǐng)求/convert/test1?user=ready,1,效果如下:

          tomcat 控制臺(tái)輸出

          name:ready
          age:1

          4、案例代碼 git 地址

          4.1、git 地址

          https://gitee.com/javacode2018/springmvc-series

          4.2、本文案例代碼結(jié)構(gòu)說(shuō)明

          5、SpringMVC 系列目錄

          1. SpringMVC 系列第 1 篇:helloword
          2. SpringMVC 系列第 2 篇:@Controller、@RequestMapping
          3. SpringMVC 系列第 3 篇:異常高效的一款接口測(cè)試?yán)?/a>
          4. SpringMVC 系列第 4 篇:controller 常見(jiàn)的接收參數(shù)的方式
          5. SpringMVC 系列第 5 篇:@RequestBody 大解密,說(shuō)點(diǎn)你不知道的
          6. SpringMVC 系列第 6 篇:上傳文件的 4 種方式,你都會(huì)么?
          7. SpringMVC 系列第 7 篇:SpringMVC 返回視圖常見(jiàn)的 5 種方式,你會(huì)幾種?
          8. SpringMVC 系列第 8 篇:返回 json & 通用返回值設(shè)計(jì)
          9. SpringMVC 系列第 9 篇:SpringMVC 返回 null 是什么意思?
          10. SpringMVC 系列第 10 篇:異步處理
          11. SpringMVC 系列第 11 篇:集成靜態(tài)資源
          12. SpringMVC 系列第 12 篇:攔截器
          13. SpringMVC 系列第 13 篇:統(tǒng)一異常處理
          14. SpringMVC 系列第 14 篇:實(shí)戰(zhàn)篇:通用返回值 & 異常處理設(shè)計(jì)
          15. SpringMVC 系列第 15 篇:全注解的方式 ?&? 原理解析
          16. SpringMVC 系列第 16 篇:通過(guò)源碼解析 SpringMVC 處理請(qǐng)求的流程
          17. SpringMVC 系列第 17 篇:源碼解析 SpringMVC 容器的啟動(dòng)過(guò)程
          18. SpringMVC 系列第 18 篇:強(qiáng)大的 RequestBodyAdvice 解密
          19. SpringMVC 系列第 19 篇:強(qiáng)大的 ResponseBodyAdvice 解密
          20. SpringMVC 系列第 20 篇:RestFull 詳解
          21. SpringMVC 系列第 21 篇:接口調(diào)用過(guò)利器 RestTemplate
          22. SpringMVC 系列第 22 篇:參數(shù)解析器 HandlerMethodArgumentResolver 解密
          23. SpringMVC 系列第 23 篇:@RequestParam 用法及原理詳解
          24. SpringMVC 系列第 24 篇:@RequestBody 用法及原理詳解
          25. SpringMVC 系列第 25 篇:@RequestHeader 用法及原理詳解
          26. SpringMVC 系列第 26 篇:@CookieValue 用法及原理詳解
          27. SpringMVC 系列第 27 篇:@RequestAttribute 詳解
          28. SpringMVC 系列第 28 篇:@SessionAttribute 詳解
          29. SpringMVC 系列第 29 篇:重定向和轉(zhuǎn)向詳解

          6、更多系列文章

          1. Spring 高手系列(共 56 篇)
          2. Java 高并發(fā)系列(共 34 篇)
          3. MySql 高手系列(共 27 篇)
          4. Maven 高手系列(共 10 篇)
          5. Mybatis 系列(共 12 篇)
          6. 聊聊 db 和緩存一致性常見(jiàn)的實(shí)現(xiàn)方式
          7. 接口冪等性這么重要,它是什么?怎么實(shí)現(xiàn)?
          8. 泛型,有點(diǎn)難度,會(huì)讓很多人懵逼,那是因?yàn)槟銢](méi)有看這篇文章!

          7、最新資料

          1. 尚硅谷 Java 學(xué)科全套教程(總 207.77GB)
          2. 2021 最新版 Java 微服務(wù)學(xué)習(xí)線路圖 + 視頻
          3. 阿里技術(shù)大佬整理的《Spring 學(xué)習(xí)筆記.pdf》
          4. 阿里大佬的《MySQL 學(xué)習(xí)筆記高清.pdf》
          5. 2021 版 java 高并發(fā)常見(jiàn)面試題匯總.pdf
          6. Idea 快捷鍵大全.pdf
          瀏覽 79
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕一级黄色大片 | 久久久aV片 | 在线观看无码视频 | 亚洲Aa俒日本 | 成人在线大香蕉免费 |