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

當(dāng)前位置:首頁 > 科技  > 軟件

Spring強(qiáng)大的數(shù)據(jù)格式化處理功能,你必須得知道

來源: 責(zé)編: 時間:2023-09-20 21:55:57 358觀看
導(dǎo)讀環(huán)境:Springboot2.6.12通常,當(dāng)需要實(shí)現(xiàn)通用類型轉(zhuǎn)換邏輯時,可以使用轉(zhuǎn)換器SPI?例如,用于在java.util.Date和Long之間轉(zhuǎn)換。當(dāng)你在客戶端環(huán)境(如web應(yīng)用程序)中工作并且需要解析和打印本地化字段值時,可以使用格式化程序SPI

環(huán)境:Springboot2.6.12y4s28資訊網(wǎng)——每日最新資訊28at.com

通常,當(dāng)需要實(shí)現(xiàn)通用類型轉(zhuǎn)換邏輯時,可以使用轉(zhuǎn)換器SPI?例如,用于在java.util.Date和Long之間轉(zhuǎn)換。當(dāng)你在客戶端環(huán)境(如web應(yīng)用程序)中工作并且需要解析和打印本地化字段值時,可以使用格式化程序SPI。ConversionService為兩個SPI提供統(tǒng)一的類型轉(zhuǎn)換API。y4s28資訊網(wǎng)——每日最新資訊28at.com

在Springboot環(huán)境下如何自定義數(shù)據(jù)類型的轉(zhuǎn)換?y4s28資訊網(wǎng)——每日最新資訊28at.com

Formatter SPI

Formatter SPI 實(shí)現(xiàn)字段格式化邏輯非常簡單,而且是強(qiáng)類型的。以下列表顯示格式化程序接口定義:y4s28資訊網(wǎng)——每日最新資訊28at.com

package org.springframework.format;public interface Formatter<T> extends Printer<T>, Parser<T> {}

Formatter 從Printer和Parser構(gòu)建塊接口擴(kuò)展而來。以下列表顯示了這兩個接口的定義:y4s28資訊網(wǎng)——每日最新資訊28at.com

public interface Printer<T> {  String print(T fieldValue, Locale locale);}import java.text.ParseException;public interface Parser<T> {  T parse(String clientValue, Locale locale) throws ParseException;}

要創(chuàng)建自己的Formatter格式化程序,只需要實(shí)現(xiàn)上面的Formatter接口。將泛型T替換為需要格式化的對象類型?—?例如,java.util.Date。實(shí)現(xiàn)print()操作以打印T的實(shí)例以在客戶端區(qū)域中顯示。實(shí)現(xiàn)parse()操作,從客戶端語言環(huán)境返回的格式化表示中解析T的實(shí)例。如果解析嘗試失敗,格式化程序應(yīng)該拋出ParseException或IllegalArgumentException。注意確保格式化程序?qū)崿F(xiàn)是線程安全的。y4s28資訊網(wǎng)——每日最新資訊28at.com

自定義Formatter程序

根據(jù)用戶輸入的信息,每個字段信息通過逗號分割,通過Formatter程序?qū)⑵滢D(zhuǎn)換為Users對象。如輸入:張三,30;將信息解析為Users對象姓名為張三,年齡為30。y4s28資訊網(wǎng)——每日最新資訊28at.com

public class Users {  private String name ;  private Integer age ;}

格式化程序:y4s28資訊網(wǎng)——每日最新資訊28at.com

public class UsersFormatter implements Formatter<Users> {  @Override  public String print(Users object, Locale locale) {    if (Objects.isNull(object)) {      return "" ;    }    return "【name = " + object.getName() + ", age = " + object.getAge() + "】" ;  }  @Override  public Users parse(String text, Locale locale) throws ParseException {    if (text == null || text.trim().length() == 0) {      return null ;    }    Users user = new Users() ;    // 下面做簡單處理,不做校驗(yàn)    String[] values = text.split(",") ;    user.setName(values[0]) ;    user.setAge(Integer.parseInt(values[1]));    return user ;  }}

格式化程序定義完后,需要注冊到系統(tǒng)中讓系統(tǒng)能夠知道如何進(jìn)行轉(zhuǎn)換。y4s28資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic class WebConfig implements WebMvcConfigurer {  @Override  public void addFormatters(FormatterRegistry registry) {    registry.addFormatter(new UsersFormatter()) ;  }  }

測試接口:y4s28資訊網(wǎng)——每日最新資訊28at.com

@GetMapping("/save")public Object save(Users users) {  return users ;}

輸出:y4s28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片y4s28資訊網(wǎng)——每日最新資訊28at.com

基于注解的Formatter

可以按字段類型或注解配置字段格式。要將注解綁定到格式化程序,需要實(shí)現(xiàn)
AnnotationFormatterFactory。以下顯示了AnnotationFormatterFactory接口的定義:
y4s28資訊網(wǎng)——每日最新資訊28at.com

package org.springframework.format;public interface AnnotationFormatterFactory<A extends Annotation> {  Set<Class<?>> getFieldTypes();  Printer<?> getPrinter(A annotation, Class<?> fieldType);  Parser<?> getParser(A annotation, Class<?> fieldType);}

要創(chuàng)建實(shí)現(xiàn),請執(zhí)行以下操作:y4s28資訊網(wǎng)——每日最新資訊28at.com

參數(shù)化要與格式邏輯關(guān)聯(lián)的字段annotationType?—?例如org.springframework.format.annoation.DateTimeFormat。y4s28資訊網(wǎng)——每日最新資訊28at.com

  • getFieldTypes()返回可以使用注釋的字段類型。
  • getPrinter()返回Printer以打印帶注釋字段的值。
  • getParser()返回一個Parser來解析帶注釋字段的值。

自定義注解格式化程序

自定義注解類,用來需要格式化的字段。y4s28資訊網(wǎng)——每日最新資訊28at.com

@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})public @interface AgeFormat {}

自定義注解格式化程序。y4s28資訊網(wǎng)——每日最新資訊28at.com

public final class AgeFormatAnnotationFormatterFactory        implements AnnotationFormatterFactory<AgeFormat> {  public Set<Class<?>> getFieldTypes() {    Set<Class<?>> types = new HashSet<Class<?>>() ;    types.add(Integer.class) ;    return types;  }  @Override  public Printer<Integer> getPrinter(AgeFormat annotation, Class<?> fieldType) {    return new AgeFormatter() ;  }  @Override  public Parser<Integer> getParser(AgeFormat annotation, Class<?> fieldType) {    return new AgeFormatter() ;  }    private class AgeFormatter implements Formatter<Integer> {    @Override    public String print(Integer object, Locale locale) {      if (object == null) {        return "" ;      }      return object.toString() ;    }        @Override    public Integer parse(String text, Locale locale) throws ParseException {      if (text == null || text.trim().length() == 0) {        return -1 ;      }      return Integer.parseInt(text.substring(1)) ;    }  }}

注冊格式化程序。y4s28資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic class WebConfig implements WebMvcConfigurer {  @Override  public void addFormatters(FormatterRegistry registry) {    registry.addFormatterForFieldAnnotation(new AgeFormatAnnotationFormatterFactory()) ;  }}

Users.age字段添加注解。y4s28資訊網(wǎng)——每日最新資訊28at.com

public class Users {  private String name ;  @AgeFormat  private Integer age ;}

測試接口。y4s28資訊網(wǎng)——每日最新資訊28at.com

@GetMapping("/save2")public Object save2(Users users) {  return users ;}

y4s28資訊網(wǎng)——每日最新資訊28at.com

注意這里的年齡前面加了一個‘s’字符。y4s28資訊網(wǎng)——每日最新資訊28at.com

注解添加到參數(shù)上

格式化程序:y4s28資訊網(wǎng)——每日最新資訊28at.com

public final class UsersFormatAnnotationFormatterFactory implements AnnotationFormatterFactory<UsersFormat> {  public Set<Class<?>> getFieldTypes() {    Set<Class<?>> types = new HashSet<Class<?>>() ;    types.add(Users.class) ;    return types;  }  @Override  public Printer<?> getPrinter(UsersFormat annotation, Class<?> fieldType) {    return new UsersFormatter();  }  @Override  public Parser<?> getParser(UsersFormat annotation, Class<?> fieldType) {    return new UsersFormatter() ;  }}

接口:y4s28資訊網(wǎng)——每日最新資訊28at.com

@GetMapping("/save3")public Object save3(@UsersFormat Users users) {  return users ;}

y4s28資訊網(wǎng)——每日最新資訊28at.com


y4s28資訊網(wǎng)——每日最新資訊28at.com

完畢!??!y4s28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-10556-0.htmlSpring強(qiáng)大的數(shù)據(jù)格式化處理功能,你必須得知道

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

上一篇: 如何使用Python構(gòu)建OTP驗(yàn)證系統(tǒng)?

下一篇: 小心這個陷阱: 為什么JS中的 Every()對空數(shù)組總返回 True

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機(jī)基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據(jù)博主數(shù)碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數(shù)量是否小于或等于一個數(shù)字。例如,一個擁有三個或更多子項(xiàng)的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強(qiáng)大而靈活的功能,用于修改或增強(qiáng)函數(shù)或類的行為。裝飾器本質(zhì)上是一個函數(shù),它接受另一個函數(shù)或類作為參數(shù),并返回一個新的函數(shù)或類。它們通常用
  • 一個注解實(shí)現(xiàn)接口冪等,這樣才優(yōu)雅!

    場景碼猿慢病云管理系統(tǒng)中其實(shí)高并發(fā)的場景不是很多,沒有必要每個接口都去考慮并發(fā)高的場景,比如添加住院患者的這個接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:圖片上述代碼有
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預(yù)警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業(yè)發(fā)布的ESG報告。ESG是&ldquo;環(huán)境保
  • 東方甄選單飛:有些鳥注定是關(guān)不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創(chuàng)始人俞敏洪帶隊(duì)的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • 余承東:AI大模型技術(shù)的發(fā)展將會帶來下一代智能終端操作系統(tǒng)的智慧體驗(yàn)

    8月4日消息,2023年華為開發(fā)者大會(HDC.Together)今天正式開幕,華為發(fā)布HarmonyOS 4、全新升級的鴻蒙開發(fā)套件、HarmonyOS Next開發(fā)者預(yù)覽版本等一系列
  • 7月4日見!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數(shù)亮相,而下半年即將推出的頂級旗艦已經(jīng)成為了數(shù)碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • Android 14發(fā)布:首批適配機(jī)型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發(fā)布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機(jī),同時發(fā)布了Androi
Top 主站蜘蛛池模板: 京山县| 温泉县| 葫芦岛市| 宜阳县| 固安县| 礼泉县| 武汉市| 六盘水市| 阿图什市| 华亭县| 湖南省| 伊春市| 兴仁县| 六盘水市| 黔东| 林芝县| 双城市| 恩平市| 和田县| 尉氏县| 增城市| 连平县| 县级市| 巴南区| 蕲春县| 林甸县| 文化| 安平县| 赞皇县| 榆社县| 泸水县| 周口市| 龙江县| 工布江达县| 策勒县| 时尚| 徐州市| 城口县| 同仁县| 溧水县| 高唐县|