精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一招教你解決頁面中關聯id的轉換

開發 前端
依賴于數據緩存,一般針對通用數據才有數據轉換的需要,比如用戶、部門數據等,一般這些數據更適合緩存。

在工作中,我們經常有這樣的業務情況,實體間通過id實現數據業務上的關聯,比如訂單和用戶,訂單的創建人id、商品id等,在頁面查詢時我們需要將對應的id信息轉換成對應的中文描述,比如用戶中文名稱,商品中文名稱等。如果是單條數據的展示還好,但是設計到列表查詢,如何高效、優雅地實現這個效果呢?

現在接口返回的數據基本都是JSON格式,比如spring中使用了jackson,在controller層對結果進行json序列化,而我們要做的就是在序列化的過程中,實現id的轉換。

使用方式

定義實體轉換接口

由于需要對訂單實體中的創建人id進行轉換:

public interface UserConvert {

    String USER_CACHE = "USER_CACHE";

    String userId();

    default ConvertItem getUserConvert(){
        if( userId() == null ){
            return null;
        }
        return new ConvertItem(userId(), USER_CACHE);
    }

}

定義接口轉換適配器

基于上面UserConvert的處理,基于緩存實現,同時支持一個實體中多個,比如商品名稱、商品分類等!

public class UserConvertProvider extends CacheItemConvertAdapter {

    private static String name = UserConvert.USER_CACHE;

    public UserConvertProvider() {
        super(name, User.class);
    }

    @Override
    public boolean support(ConvertItem convertItem) {
        return convertItem != null && convertItem.getName().equals(name);
    }

    @Override
    public String convert(ConvertItem convertItem) {
        if( convertItem == null ){
            return null;
        }
        User user = (User) fromCache(convertItem.getId());
        return user != null ? user.getCaption() : null;
    }
}

需要轉換的數據緩存

該實現依賴緩存,需要優先對需要轉換的數據進行緩存,因此示例中添加了緩存示例:

public void init(){
    Cache cache = cacheManager.getCache(UserConvert.USER_CACHE);
    if( cache != null ){
        cache.put("u1", new User("u1","Tom"));
    }
}

實體定義

實體中需要通過實現接口UserConvert,這樣對多個數據項轉換時可以繼續擴展。

public class Order implements UserConvert {

    private String id;

    private String name;

    private LocalDateTime createTime = LocalDateTime.now();

    /**
     * 創建用戶
     */
    private String creator;

    @Override
    public String userId() {
        return creator;
    }
}

實現效果

可以看到,在輸出json中,多了一列userConvert,也就是接口中定義的get*方法:

{
    "id": "1",
    "name": "測試訂單",
    "createTime": "2024-05-08T21:55:51.5747507",
    "creator": "u1",
    "userConvert": "Tom"
}

實現原理

上面說的,主要實現基于緩存,在web查詢結果進行json序列化時,依賴于jackson的擴展,對輸出結果匹配的類型進行轉換。

@EnableCaching
@Configuration
public class JacksonCustomConfiguration{

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer(){
        return jacksonObjectMapperBuilder -> configureMapperBuilder(jacksonObjectMapperBuilder);
    }

    private void configureMapperBuilder(Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder) {
        jackson2ObjectMapperBuilder.serializers(convertSerializer());
    }

    @Bean
    public ItemConvertSerializer convertSerializer(){
        return new ItemConvertSerializer(ConvertItem.class);
    }
}
  1. 在配置文件中基于Jackson2ObjectMapperBuilderCustomizer對jackson進行擴展。
  2. 定義ItemConvertSerializer對ConvertItem類型的屬性進行處理,該類主要繼承于StdSerializer。
  3. 在ItemConvertSerializer中基于ConvertItem的name屬性來匹配對應的緩存并進行轉換。
  4. 注意開啟spring緩存*@EnableCaching*。
  5. 最后基于spring特性,定義*/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports*來實現自動注入配置。
  • ConvertItem示例:
@Getter
@Setter
public class ConvertItem {

    private String id;

    private String text;

    private String name;

    public ConvertItem() {

    }

    public ConvertItem(String id, String name) {
        this.id = id;
        this.name = name;
    }
}
  • ItemConvertAdapter擴展適配器,主要于ConvertItem搭配擴展。
public interface ItemConvertAdapter {

    /**
     * @param convertItem
     * @return
     */
    boolean support(ConvertItem convertItem);

    /**
     *
     * @param convertItem
     * @return
     */
    String convert(ConvertItem convertItem);

}
  • ItemConvertSerializer示例:
public class ItemConvertSerializer extends StdSerializer<ConvertItem> implements ApplicationContextAware {

    private List<ItemConvertAdapter> itemConvertAdapters;

    public ItemConvertSerializer(Class<ConvertItem> t) {
        super(t);
    }

    @Override
    public void serialize(ConvertItem value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        String text = "";
        if(!CollectionUtils.isEmpty(itemConvertAdapters)){
            for (ItemConvertAdapter itemConvertAdapter : itemConvertAdapters) {
                if( itemConvertAdapter.support(value) ){
                    text = itemConvertAdapter.convert(value);
                    break;
                }
            }
        }
        gen.writeString(text);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, ItemConvertAdapter> itemConvertAdapterMap
                = BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ItemConvertAdapter.class, true, false);
        if( !itemConvertAdapterMap.isEmpty() ){
            itemConvertAdapters = new ArrayList<>(itemConvertAdapterMap.values());
            itemConvertAdapters.sort(OrderComparator.INSTANCE);
        }
    }
}

優缺點

  • 使用了jackson序列化的擴展,如果使用其他序列化工具,需要單獨支持。
  • 依賴于數據緩存,一般針對通用數據才有數據轉換的需要,比如用戶、部門數據等,一般這些數據更適合緩存。
責任編輯:武曉燕 來源: Java技術指北
相關推薦

2018-06-27 10:10:34

APP評分彈窗蘋果

2022-09-06 11:53:00

開發計算

2021-06-28 20:01:07

電腦性能Windows 7

2012-02-01 15:41:42

2020-09-16 06:08:10

Linux文本比對代碼

2011-05-03 11:13:51

黑盒

2020-06-22 14:18:02

運維架構技術

2021-07-06 07:21:17

橋接模式組合

2010-01-06 09:54:59

2020-11-03 16:36:36

Windows微軟彈窗

2022-06-21 09:27:01

PythonFlaskREST API

2020-10-20 08:01:30

MySQL密碼Windows

2023-12-18 08:24:09

LinuxPythonWord

2018-08-26 15:11:44

神經網絡機器學習對抗網絡

2022-02-06 00:02:43

Windows 11虛擬機微軟

2019-01-23 10:11:43

Python爬蟲IP

2018-10-10 14:34:27

ARM嵌入式系統硬件

2020-11-17 06:43:16

安卓智能手機移動應用

2022-02-17 17:19:31

鴻蒙語音識別語音播報

2013-07-30 11:24:33

SAP“簡化IT 一招
點贊
收藏

51CTO技術棧公眾號

91最新在线| 中文字幕自拍vr一区二区三区| 欧美极品在线播放| 成人免费毛片播放| www.youjizz.com亚洲| 成人不卡视频| 久久深夜福利| 亚洲国产99精品国自产| 亚洲五码在线观看视频| 97成人免费视频| 欧美gayvideo| 欧美揉bbbbb揉bbbbb| 奇米影视首页 狠狠色丁香婷婷久久综合| 九九久久免费视频| 久久久精品区| 亚洲欧美国产高清| 2022国产精品| 麻豆亚洲av成人无码久久精品| 亚瑟一区二区三区四区| 精品成人av一区| 国产一区福利视频| 国产无精乱码一区二区三区| 成久久久网站| 欧美精品日日鲁夜夜添| 亚洲AV无码成人精品一区| 国产精品久久久久毛片| 一区二区在线| 精品国产一区二区三区不卡| 成人免费视频91| 无码精品在线观看| 母乳一区在线观看| 亚洲性av网站| 天天干天天操天天玩| 麻豆电影在线播放| 国产精品一二三四区| 欧美激情视频免费观看| 在线免费观看污视频| jizz内谢中国亚洲jizz| 国产精品色哟哟网站| 91免费人成网站在线观看18| 国产主播在线播放| 亚洲国产一区二区在线观看| 精品蜜桃在线看| 成人激情视频在线播放| 久久人人九九| 国产又黄又爽又色| 精品国产一区二区三区香蕉沈先生| 欧美性20hd另类| 亚洲一区欧美一区| 国产成人极品视频| 亚洲色图第四色| 国产免费无码一区二区| 亚洲 小说区 图片区| 外国成人免费视频| 精品国产乱码久久久久久图片| www.色就是色.com| 理论不卡电影大全神| 国产精品午夜在线观看| 都市激情久久久久久久久久久| 69成人免费视频| 国产精品久久久久久久免费观看| 伊人伊人伊人久久| 国产大尺度视频| 播放一区二区| 欧美日韩一区成人| 国产精品视频中文字幕| 婷婷成人av| 国风产精品一区二区| 国产精品国产三级国产普通话对白| 日本在线播放一区二区三区| 亚洲精品综合精品自拍| 天天操狠狠操夜夜操| 僵尸再翻生在线观看| 国产精品伦一区| 中文字幕中文字幕在线中一区高清 | 新版中文在线官网| 99热99精品| 95精品视频在线| 久久精品免费电影| 色欲av无码一区二区三区| 欧美高清xxx| 高跟丝袜一区二区三区| 97久久国产亚洲精品超碰热| avtt亚洲| 亚洲免费资源在线播放| 9色porny| 亚洲羞羞网站| 岛国视频午夜一区免费在线观看| 三年中国国语在线播放免费| 欧美男男激情videos| 色婷婷久久久久swag精品 | 国产在线观看精品一区二区三区| 国产精品久久久久久久妇| 久久亚洲不卡| 亚洲自拍在线观看| 亚洲自拍第二页| 久久久久久亚洲精品杨幂换脸| 国产精品久久久av| 亚洲国产成人无码av在线| 在线欧美视频| 久久久噜噜噜久久中文字免| 国产这里有精品| 中文字幕一区二区av | 亚洲免费电影在线观看| 国产美女福利视频| 欧美xxav| 98精品在线视频| 日韩欧美一区二区一幕| 一区在线播放| 中文字幕99页| 不卡一本毛片| 91污在线观看| 国产精品12| www.中文字幕久久久| 国产日产欧产精品推荐色| 欧美不卡在线一区二区三区| 国产视频一区二区不卡| 国产区视频在线播放| 国产不卡av一区二区| 免费成人美女在线观看| 国产成人精品免费久久久久| 精品毛片在线观看| 国产精品12区| 懂色一区二区三区av片| 婷婷免费在线视频| 亚洲天堂2014| 大荫蒂性生交片| 欧美激情不卡| 国产一区二区日韩精品欧美精品| 日本一级黄色大片| 久久久999| 国产一区二区久久久| av网站免费在线观看| 亚洲一区二区三区四区在线观看| 15—17女人毛片| 成人国产精品一区二区网站| 日韩视频一区二区三区在线播放| 动漫美女无遮挡免费| 91九色精品| 国产日韩精品一区二区| 91sp网站在线观看入口| 欧美综合色免费| 两性午夜免费视频| 奇米影视777在线欧美电影观看| 精品视频—区二区三区免费| 国产欧美小视频| 欧美成人日本| 国产成人精品亚洲精品| 欧美日韩影视| 国产精品国产三级国产有无不卡 | 亚洲av片不卡无码久久| 粉嫩av国产一区二区三区| 色婷婷av一区二区三区久久| avove在线播放| 国产精品一区专区| 日韩免费在线观看av| 亚洲国产欧美在线观看| 亚洲欧美日韩爽爽影院| 无码人妻丰满熟妇奶水区码| 国产一二三精品| 久久99国产精品99久久| 妞干网免费在线视频| 日韩国产精品亚洲а∨天堂免| 99久久精品久久亚洲精品| 国产日韩亚洲| 国产精品超碰97尤物18| 妞干网在线视频观看| 亚洲精品在线影院| 精品国产亚洲在线| 日韩av男人天堂| 91色九色蝌蚪| 国产精品入口免费软件| 国产精品91一区二区三区| 91国产在线播放| 成人线上视频| 日韩中文字幕视频在线| 亚洲va在线观看| 国产欧美精品区一区二区三区| 欧美高清中文字幕| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产精品露脸自拍| 四虎精品一区二区三区| 自拍av一区二区三区| 欧美 国产 小说 另类| 哺乳挤奶一区二区三区免费看| 色系列之999| 性一交一乱一精一晶| 亚洲日本在线视频观看| 成年人小视频在线观看| 欧美成人午夜| 美乳视频一区二区| 91九色成人| 色妞一区二区三区| 黑人精品一区二区三区| 亚洲精品免费在线| 爱豆国产剧免费观看大全剧苏畅| 欧美视频二区| 成人9ⅰ免费影视网站| 国产乱色在线观看| 欧美乱妇20p| 国产无码精品视频| 中文字幕一区二区在线播放| 成熟妇人a片免费看网站| 奇米色一区二区三区四区| 国产欧美精品aaaaaa片| 久久在线电影| 免费av在线一区二区| 成人性生交大片免费看96| 国产日韩欧美日韩大片| 日韩新的三级电影| 亚洲片av在线| 国产成人麻豆免费观看| 国产免费观看久久| www国产视频| 91久久视频| 欧美日韩国产高清视频| 日韩精品一区二区三区| 欧美激情第6页| 草莓福利社区在线| 精品99一区二区| 国产一区二区在线视频聊天| 色狠狠综合天天综合综合| 国产激情av在线| 91香蕉视频在线| 亚洲午夜久久久久久久久| 国产又黄又大久久| 91高清国产视频| 日本不卡视频在线| 任你操这里只有精品| 日韩av在线中文字幕| 91深夜福利视频| 欧洲亚洲精品| 国产精品一区二区三| 日本在线观看大片免费视频| 最好看的2019年中文视频| 国产一区二区三区福利| 777奇米四色成人影色区| 国产一级视频在线观看| 亚洲三级电影网站| 三级黄色在线观看| 成人激情小说网站| www.超碰com| 久久免费高清| 国产福利一区视频| 日韩国产在线观看| a天堂资源在线观看| 最新国产精品久久久| 手机在线视频你懂的| 中文字幕日韩一区二区不卡| 国产资源第一页| 午夜精品久久| 真人抽搐一进一出视频| 日韩一区电影| 一区二区三区在线视频111| 日韩欧美伦理| 美国av在线播放| 欧美va天堂| 亚洲人精品午夜射精日韩| 亚洲激情亚洲| 成人一区二区三| 久久电影网站中文字幕| www.浪潮av.com| 中国成人一区| 日韩黄色短视频| 国产视频久久| 狠狠躁狠狠躁视频专区| 国产麻豆欧美日韩一区| 国产成人精品一区二区在线小狼 | 亚洲自拍偷拍色图| 国语一区二区三区| 成人春色激情网| 欧美日韩黄网站| 国产精品一区二区三区在线| 国产精选久久| 国产精品手机视频| 免费看日本一区二区| 一区二区三区偷拍| 亚洲欧洲午夜| 少妇一级淫免费播放| 国产成a人亚洲| 性鲍视频在线观看| 麻豆91在线观看| 欧美一级裸体视频| 国产精品456露脸| 欧美特黄一区二区三区| 日韩一区在线免费观看| 午夜影院在线看| 欧美人牲a欧美精品| 综合久久中文字幕| 日韩欧美国产wwwww| 国产熟女一区二区三区四区| 欧美日韩aaaaaa| 少妇高潮一区二区三区99小说| 国产亚洲精品久久| 欧美性video| 欧美片一区二区三区| 91精选在线| 日韩暖暖在线视频| 成人av三级| 亚洲在线免费视频| 欧美熟乱15p| a在线视频观看| 欧美一级二区| 免费日韩中文字幕| 风间由美一区二区三区在线观看| 精品成人av一区二区三区| 国产精品久久久久久久成人午夜| 欧美性大战久久| 波多野结衣激情视频| 日韩精品一区二区三区蜜臀 | 久久久国产视频91| 欧美成人黑人| 国产精品一区视频| 欧美a级在线| 久久精品国产露脸对白| 国产午夜精品一区二区三区视频| 国产一级av毛片| 天天综合网天天综合色| 国产免费av电影| 视频一区视频二区国产精品| gay欧美网站| 久久99久久精品国产| 亚洲国产高清一区二区三区| 欧美性猛交xx| 成人免费观看视频| 99久久国产精| 亚洲一卡二卡三卡四卡| 国产美女永久免费| 久久伊人免费视频| 国精一区二区三区| 91色在线观看| 中文字幕一区二区精品区| 久久久福利影院| 亚洲视频香蕉人妖| 国产毛片毛片毛片毛片| 久久精品国产成人| 综合欧美精品| 亚洲免费视频播放| 国产日韩综合| 极品粉嫩小仙女高潮喷水久久| 日本在线影院| 91九色蝌蚪国产| 香蕉久久网站| 91丝袜超薄交口足| 亚洲男帅同性gay1069| 国产特黄一级片| 久久久久九九九九| 国产乱人伦丫前精品视频| 国产高清av在线播放| 97精品国产露脸对白| 中文字幕视频网| 亚洲天堂av高清| 巨胸喷奶水www久久久| 亚洲AV无码成人精品一区| 国产精品中文欧美| 国产在线精品观看| 亚洲成人黄色在线| 亚洲校园激情春色| 日韩精品国内| 欧美精品国产一区二区| 极品白嫩少妇无套内谢| 精品久久久久久中文字幕大豆网| 全部免费毛片在线播放网站| 久久精品亚洲一区| 青草伊人久久| 亚洲最大免费| 久久午夜精品| 性色国产成人久久久精品 | 亚洲精品综合久久| 91精品国产91久久久| 精品国产美女| 在线播放黄色av| 福利精品视频在线| 日韩免费啪啪| 国产高清精品一区二区三区| 香蕉精品999视频一区二区| 国产日产在线观看| 精品国产成人系列| 日日av拍夜夜添久久免费| 国产人妻互换一区二区| jizz一区二区| 亚洲视频一区在线播放| 久久久久久久久久国产| 你微笑时很美电视剧整集高清不卡| 9l视频白拍9色9l视频| 亚洲电影一区二区三区| av中文字幕免费| 久久久成人精品视频| 免费福利视频一区| 国产永久免费网站| 五月婷婷另类国产| 人妻精品无码一区二区| www.成人在线| 影音先锋男人的网站| 精品无人码麻豆乱码1区2区| 一级片视频免费看| 色婷婷综合五月| 亚洲精品白浆| 午夜精品福利一区二区| 日韩电影在线观看一区|