日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

SpringBoot優雅定制接口參數格式轉換

來源: 責編: 時間:2024-05-29 08:52:24 138觀看
導讀環境:SpringBoot3.2.51. 簡介在Spring MVC中,數據類型的轉換、自動綁定和格式化是一個非常強大的功能,Spring內置了非常多的數據類型轉換器。如在一個HTTP請求中SpringMVC默認就具備將JSON個數的數據轉換為Java對象,將一

環境:SpringBoot3.2.5OZi28資訊網——每日最新資訊28at.com

1. 簡介

在Spring MVC中,數據類型的轉換、自動綁定和格式化是一個非常強大的功能,Spring內置了非常多的數據類型轉換器。如在一個HTTP請求中SpringMVC默認就具備將JSON個數的數據轉換為Java對象,將一個字符串數字轉換為Number類型等等。然而,Spring的默認數據綁定機制有時可能無法滿足特定的業務需求,比如從特定格式的字符串中解析出自定義對象的實例。為了解決這個問題,Spring允許我們自定義注解和數據格式化器,以便在請求參數和Java對象之間進行自定義的轉換。OZi28資訊網——每日最新資訊28at.com

本篇文章將結合如下需求講解如何基于SpringBoot環境下自定義注解來實現數據的轉換。OZi28資訊網——每日最新資訊28at.com

現有如下接口:OZi28資訊網——每日最新資訊28at.com

@GetMapping("/user")public User getUser(User user) {  return user ;}

請求url如下:OZi28資訊網——每日最新資訊28at.com

http://localhost:9001/api/objects/user?user=666,中國

在默認情況下,Spring是無法將這里的user參數值正確的綁定到User對象。OZi28資訊網——每日最新資訊28at.com

2. 實戰案例

2.1 實現目標

為了盡可能的簡單,期望通過在接口請求參數上添加一個注解就能完成數據類型的轉換及綁定。如下形式:OZi28資訊網——每日最新資訊28at.com

@GetMapping("/user")public User getUser(@UserFormat User user)

Spring提供了一種基于注解驅動的格式化,也就是上面這里看到的通過注解標注一個參數(字段)來實現數據的格式化。OZi28資訊網——每日最新資訊28at.com

要實現基于注解驅動的格式化,需要我們自定義類實現AnnotationFormatterFactory接口。該接口定義如下:OZi28資訊網——每日最新資訊28at.com

// 這里的泛型是注解類型,也就是我們要使用什么注解來標記我們的參數(字段)public interface AnnotationFormatterFactory<A extends Annotation> {  // 這個注解可以使用在什么字段上  Set<Class<?>> getFieldTypes();  // 將對象轉換為String  Printer<?> getPrinter(A annotation, Class<?> fieldType);  // 將字符串解析為對象  Parser<?> getParser(A annotation, Class<?> fieldType);}

該接口非常的簡單,主要就是如何將對象轉String,如何從String轉對象。OZi28資訊網——每日最新資訊28at.com

2.2 自定義注解格式化工廠

public class StringToUserFormatter implements AnnotationFormatterFactory<UserFormat> {    @Override    public Set<Class<?>> getFieldTypes() {      return Set.of(User.class) ;    }    @Override    public Printer<User> getPrinter(UserFormat annotation, Class<?> fieldType) {      return (object, locale) -> object.toString() ;    }    @Override    public Parser<User> getParser(UserFormat annotation, Class<?> fieldType) {      return (text, locale) -> {        Assert.hasText(text, "數據錯誤") ;        String[] s = text.split(",") ;        User user = new User() ;        user.setId(Long.parseLong(s[0])) ;        user.setName(s[1]) ;        return user ;      } ;    }  }

自定義注解:OZi28資訊網——每日最新資訊28at.com

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.PARAMETER)public static @interface UserFormat {}

有了以上的工廠類后,接下來是注冊到Spring容器中。OZi28資訊網——每日最新資訊28at.com

2.3 注冊格式化器

@Componentpublic class WebDataTypeConfig implements WebMvcConfigurer {  @Override  public void addFormatters(FormatterRegistry registry) {    registry.addFormatterForFieldAnnotation(new StringToUserFormatter()) ;  }}

完成以上步驟就大功告成了,接下來測試OZi28資訊網——每日最新資訊28at.com

2.4 測試

@GetMapping("/user")public User getUser(@UserFormat User user) {  return user ;}

測試結果OZi28資訊網——每日最新資訊28at.com

圖片圖片OZi28資訊網——每日最新資訊28at.com

正確的轉換為User對象?;谠撟⒔膺M行格式化不僅僅只用到接口參數上,還可以用到字段上。OZi28資訊網——每日最新資訊28at.com

2.5 用在字段上

public static class DTO {  @UserFormat  private User user ;  private Integer age ;}

測試接口:OZi28資訊網——每日最新資訊28at.com

// 注意,可不要改成post,然后用@RequestBody。無用反而報錯@GetMapping("/dto")public DTO save(DTO dto) {  return dto ;}

測試結果OZi28資訊網——每日最新資訊28at.com

圖片圖片OZi28資訊網——每日最新資訊28at.com

正確的輸出結果。OZi28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-91353-0.htmlSpringBoot優雅定制接口參數格式轉換

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python中的全局變量和局部變量詳解

下一篇: 深入Go原理:協程間通信基礎Chan

標簽:
  • 熱門焦點
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內上線了&ldquo;本地生活&rdquo;入口,位置較深,位于首頁的&ldquo;充值中心&rdquo;內,目前主要售賣美食相關的
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 造車兩年股價跌六成,小米的估值邏輯變了嗎?

    如果從小米官宣造車后的首個交易日起持有小米集團的股票,那么截至2023年上半年最后一個交易日,投資者將浮虧59.16%,同區間的恒生科技指數跌幅為52.78%
  • 華為HarmonyOS 4升級計劃公布:首批34款機型今日開啟公測

    8月4日消息,今天下午華為正式發布了HarmonyOS 4系統,在更流暢的前提下,還帶來了不少新功能,UI設計也有變化,會讓手機煥然一新。華為宣布,首批機型將會在
  • 華為HarmonyOS 4.0將于8月4日發布 或搭載AI大模型技術

    華為宣布HarmonyOS4.0將于8月4日正式發布。此前,華為已經針對開發者公布了HarmonyOS4.0,以便于開發者提前進行適配,也因此被曝光出了一些新系統的特性
  • 電博會上海爾智家模擬500平大平層,還原生活空間沉浸式體驗

    電博會為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗。程傳
Top 主站蜘蛛池模板: 元谋县| 荥阳市| 花莲县| 吐鲁番市| 黔西| 阿拉善右旗| 新田县| 方山县| 仁布县| 镇原县| 西贡区| 商南县| 德庆县| 临湘市| 库尔勒市| 沅江市| 屏山县| 和硕县| 怀远县| 玉溪市| 鹰潭市| 合肥市| 宁化县| 东阿县| 吴堡县| 宁陕县| 白沙| 紫阳县| 马尔康县| 阿克苏市| 台州市| 盱眙县| 临城县| 靖边县| 肇源县| 萨迦县| 自治县| 荔浦县| 平利县| 靖远县| 昭苏县|