日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

springboot枚舉類型傳遞的步驟

瀏覽:72日期:2023-03-18 15:17:55

在本周寫項目時,需要將枚舉類型作為參數(shù)進(jìn)行傳遞。

測試

首先先建立一個枚舉類:

public enum ScoreType { TOTAL_SCORE('總評成績'), MIDDLE_SCORE('期中成績'), FINAL_SCORE('期末成績'); String des; // 描述 ScoreType(String des) {this.des = des; } public String getDes() {return des; } }

再建立一個枚舉api接口:

@RestController@RequestMapping('/Klass')public class KlassController { @GetMapping('testEnum') public String testEnum(@RequestParam ScoreType scoreType) {return '枚舉序號:' + scoreType.ordinal() + ',枚舉名:' + scoreType.name(); }}

進(jìn)行測試,使用枚舉名發(fā)送數(shù)據(jù):

springboot枚舉類型傳遞的步驟

使用枚舉序號發(fā)送數(shù)據(jù):

springboot枚舉類型傳遞的步驟

由此可見,在springboot默認(rèn)請求參數(shù)映射中,枚舉類型只能通過枚舉名來進(jìn)行參數(shù)映射,但有時候我們需要用序號來做映射。

Converter

顧明思議Converter就是轉(zhuǎn)換的意思,我們可以通過定義的Converter來確定參數(shù)到枚舉類型之間的轉(zhuǎn)換:

public class BaseEnumConverter<T extends Enum> implements Converter<String, T> { private Map<String, T> enumMap = new HashMap<>(); public BaseEnumConverter(Class<T> enumType) {T[] enums = enumType.getEnumConstants();for (T e : enums) { enumMap.put(String.valueOf(e.ordinal()), e); enumMap.put(e.name(), e);} } @Override public T convert(String source) {T t1 = enumMap.get(source.toLowerCase());T t2 = enumMap.get(source.toUpperCase());if (t1 == null && t2 == null) { throw new IllegalArgumentException('無法匹配對應(yīng)的枚舉類型');}return t1 == null ? t2 : t1; }}

分析代碼,根據(jù)運行時具體枚舉類的參數(shù),獲取所有枚舉值,并將各個枚舉值序列和枚舉值名與枚舉值之間做映射(保存在Map中),如上述枚舉類型,將會生成以下Map:

0 => ScoreType.TOTAL_SCORETOTAL_SCORE => ScoreType.TOTAL_SCORE1 => ScoreType.MIDDLE_SCOREMIDDLE_SCORE => ScoreType.MIDDLE_SCORE2 => ScoreType.FINAL_SCOREFINAL_SCORE => ScoreType.FINAL_SCORE

通過此Converter,就可以實現(xiàn)前臺傳序號和枚舉名,都能成功映射到枚舉類型,將此Converter通過工廠模式提供到springboot中:

public class BaseEnumConverterFactory implements ConverterFactory<String, Enum> { private static final Map<Class, Converter> CONVERTERS = new HashMap<>(); @Override public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {// 每一個類型創(chuàng)建一個轉(zhuǎn)換器Converter<String, T> converter = CONVERTERS.get(targetType);if (converter == null) { converter = new BaseEnumConverter<>(targetType); CONVERTERS.put(targetType, converter);}return converter; }}@Configuration@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) {registry.addConverterFactory(new BaseEnumConverterFactory()); }}

進(jìn)行測試,使用枚舉名發(fā)送數(shù)據(jù):

springboot枚舉類型傳遞的步驟

靈活化

為了保證靈活性,每個枚舉類型可以自定義轉(zhuǎn)換的方式,建立一個接口,對接口進(jìn)行類型轉(zhuǎn)換,建立一個BaseEnum接口:

public interface BaseEnum { String[] getKeys(); //返回的keys可轉(zhuǎn)換為BaseEnum}

枚舉類實現(xiàn)此接口,并定義映射方式

public enum ScoreType implements BaseEnum { TOTAL_SCORE('總評成績'), MIDDLE_SCORE('期中成績'), FINAL_SCORE('期末成績'); String des; // 描述 ScoreType(String des) {this.des = des; } public String getDes() {return des; } @Override public String[] getKeys() {String[] s = {String.valueOf(this.ordinal()), this.name()}; // 次序和名字都可轉(zhuǎn)為枚舉,如0和total_score => ScoreType.TOTAL_SCORE return s; }}

轉(zhuǎn)換器統(tǒng)一對BaseEnum進(jìn)行轉(zhuǎn)換:

public class BaseEnumConverter<T extends BaseEnum> implements Converter<String, T> { private Map<String, T> enumMap = new HashMap<>(); public BaseEnumConverter(Class<T> enumType) {T[] enums = enumType.getEnumConstants();// 根據(jù)keys建立轉(zhuǎn)換for (T e : enums) { for (String key : e.getKeys()) {enumMap.put(key, e); }} } @Override public T convert(String source) {T t1 = enumMap.get(source.toLowerCase());T t2 = enumMap.get(source.toUpperCase());if (t1 == null && t2 == null) { throw new IllegalArgumentException('無法匹配對應(yīng)的枚舉類型');}return t1 == null ? t2 : t1; }}

對于每個枚舉類型,可通過返回的keys來自定義轉(zhuǎn)換的方式。

以上就是springboot枚舉類型傳遞的步驟的詳細(xì)內(nèi)容,更多關(guān)于springboot枚舉類型傳遞的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品一页| 欧美中文一区二区| 久久先锋影音| 夜夜嗨av一区二区三区网站四季av| 国产综合欧美| 国产亚洲永久域名| 巨乳诱惑日韩免费av| 久久久久久美女精品| 国产伊人精品| 亚洲一区二区动漫| 午夜精品福利影院| 国产探花一区在线观看| 欧美激情99| 日韩在线观看一区| 国产一区久久| 一区二区电影在线观看| 日韩福利视频导航| 捆绑调教美女网站视频一区| 福利一区二区三区视频在线观看| 国产成人精品亚洲日本在线观看| 1024精品一区二区三区| 亚洲专区在线| 日韩激情网站| 国语对白精品一区二区| 99久精品视频在线观看视频| 99亚洲精品| 欧美在线观看天堂一区二区三区| 欧美激情麻豆| 国内精品福利| 日韩中文av| 成人日韩av| 欧美日韩国产高清| 日本成人在线不卡视频| 红杏一区二区三区| 99热精品在线观看| 国产一精品一av一免费爽爽| 亚洲天堂免费电影| 黄色亚洲大片免费在线观看| 亚洲精品国模| 久久精品伊人| 精品一区免费| 97成人超碰| 天堂中文av在线资源库| 野花国产精品入口| 国产精品一区二区三区av麻| 五月天av在线| 综合一区av| 欧美国产偷国产精品三区| 伊人精品在线| 国产精品久久亚洲不卡| 999精品一区| 日韩高清不卡在线| 国产资源在线观看入口av| 在线亚洲一区| 麻豆成人91精品二区三区| 精品在线99| 免费在线成人| 亚洲一区网站| 黄色aa久久| 亚洲精品影视| 日韩三区在线| 国产乱码精品| 亚洲一区国产一区| 免费看av不卡| 日韩不卡手机在线v区| 久久一级电影| 久久精品一区二区三区中文字幕| 中文在线不卡| 都市激情国产精品| 亚洲欧美在线综合| 特黄特色欧美大片| 麻豆精品新av中文字幕| 免费在线观看一区二区三区| 国产精品亚洲一区二区三区在线观看| 欧美亚洲三级| 日韩精品一卡二卡三卡四卡无卡| 成人在线免费观看91| 日韩欧美美女在线观看| 亚洲欧美伊人| 日韩不卡一区| 欧美日韩1区2区3区| 欧美在线综合| zzzwww在线看片免费| 国产美女视频一区二区| 免费中文字幕日韩欧美| 欧美成人基地 | 精品三级在线观看视频| 视频一区二区欧美| 国产盗摄——sm在线视频| 日韩精品久久久久久久软件91| 精品中文字幕一区二区三区av| 国产一区国产二区国产三区| 日本少妇一区二区| 日韩在线卡一卡二| 不卡中文一二三区| 蜜桃成人精品| 98精品视频| 大香伊人久久精品一区二区| 国产欧美一区二区精品久久久 | 亚洲综合专区| 99国产精品久久久久久久| 99久久亚洲精品蜜臀| 国产精品久久久久久久久妇女| 欧美日本久久| 日韩手机在线| 亚洲精品综合| 蜜臀国产一区二区三区在线播放| 激情综合自拍| 五月天久久777| 国内激情久久| 久久婷婷激情| 欧洲一区二区三区精品| 国产传媒av在线| 精品国产一区二区三区性色av| 国产精品美女久久久久久不卡| 日韩精品久久久久久| 日韩精品亚洲专区| 日本成人在线视频网站| 欧美一区二区三区久久精品| 日本免费一区二区视频| 欧美一区成人| 国产精品主播| 免费一区二区三区在线视频| 国产精品久久久久久久久免费高清 | 福利一区和二区| 大香伊人久久精品一区二区| 色乱码一区二区三区网站| 欧美丰满日韩| 亚洲成av人片一区二区密柚| 亚洲手机视频| 在线精品小视频| 国产精品呻吟| 亚洲乱亚洲高清| 日韩av一二三| 国产精品qvod| 成人在线视频中文字幕| 高清av不卡| 欧美日韩在线二区| 99国产精品| 啪啪亚洲精品| 精品久久久亚洲| 欧美黄色网页| 国产视频一区免费看| 中文字幕免费精品| 国产精品色在线网站| 国产成人精品一区二区三区免费| 日韩国产网站| 中文字幕中文字幕精品| 国产欧美在线观看免费| av在线最新| 黄页网站一区| 亚洲精品看片| 国产精品777777在线播放 | 国产精品久久久久av蜜臀| 国产精品99一区二区三区| 久久精品亚洲人成影院| 视频精品一区二区| 国产日产精品一区二区三区四区的观看方式 | 合欧美一区二区三区| 亚洲欧美日韩视频二区| 日韩高清中文字幕一区| 精品视频在线你懂得| 九九在线精品| 欧美日韩18| 久久影视一区| 欧美亚洲三级| 日韩精品免费一区二区三区| 一区二区三区国产盗摄| 精品三级国产| 美女久久网站| 欧美激情精品| 国产偷自视频区视频一区二区| 国产欧美一区二区三区国产幕精品| 国产精品伦理久久久久久| 最新日韩欧美| 国产精品久久久网站| 1000部精品久久久久久久久| 日韩国产在线观看| 亚洲a一区二区三区| 青青国产精品| 久久国产精品成人免费观看的软件| 亚洲精品美女91| 伊人久久av| 日韩精品视频网| 久久一区二区三区电影| 久久精品 人人爱| 久久国产电影| 久久99性xxx老妇胖精品| 怡红院精品视频在线观看极品| 欧美在线不卡| 欧美91福利在线观看| 欧美亚洲一级| 一级欧洲+日本+国产| 麻豆精品新av中文字幕| 日韩在线观看一区二区| 91av亚洲| 国产精品一区亚洲| 久久亚洲影院| 香蕉久久99| 精品国产精品久久一区免费式|