SpringBoot JSON字典序列化翻譯

🧩 一、效果預期

@Data
public class UserVO {private String status;@DictTranslate(type = "user_status")private String statusName;
}

最終返回 JSON:

{"status": "1","statusName": "啟用"
}

🛠? 二、實現步驟

1. 定義注解 @DictTranslate

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DictTranslate {/*** 字典類型,對應數據源中的類型,比如 "user_status"*/String type();
}

2. 構建字典緩存或查詢類(模擬)

實際項目中應從數據庫中加載緩存

@Component
public class DictService {private static final Map<String, Map<String, String>> DICT = new HashMap<>();static {Map<String, String> userStatus = new HashMap<>();userStatus.put("0", "禁用");userStatus.put("1", "啟用");DICT.put("user_status", userStatus);}public String translate(String type, String code) {return DICT.getOrDefault(type, Collections.emptyMap()).getOrDefault(code, code);}
}

3. 創建序列化器(核心)

public class DictTranslateSerializer extends JsonSerializer<Object> implements ContextualSerializer {private String dictType;@Autowiredprivate DictService dictService;public DictTranslateSerializer() {}public DictTranslateSerializer(String dictType, DictService dictService) {this.dictType = dictType;this.dictService = dictService;}@Overridepublic void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {String translated = dictService.translate(dictType, String.valueOf(value));gen.writeString(translated);}@Overridepublic JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {if (property != null) {DictTranslate annotation = property.getAnnotation(DictTranslate.class);if (annotation != null) {DictService dictService = SpringContextUtil.getBean(DictService.class); // 自定義工具類return new DictTranslateSerializer(annotation.type(), dictService);}}return prov.findValueSerializer(property.getType(), property);}
}

4. 啟用序列化器(在字段上)

@Data
public class UserVO {private String status;@DictTranslate(type = "user_status")@JsonSerialize(using = DictTranslateSerializer.class)private String statusName;
}

5. 補充工具類 SpringContextUtil(從 Spring 上下文中獲取 Bean)

@Component
public class SpringContextUtil implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext ctx) {SpringContextUtil.context = ctx;}public static <T> T getBean(Class<T> clazz) {return context.getBean(clazz);}
}

? 補充建議

你還可以使用 注解+切面(AOP)@ControllerAdvice 來統一處理字典翻譯,從而做到:

  • 不修改實體類結構;
  • 支持所有出參 DTO 的自動翻譯;
  • 支持分頁列表等統一轉換。

如需這種進階版本,也可以告訴我,我來幫你封裝。


? 最終效果

  • 只需在字段上添加 @DictTranslate(type = "xxx")@JsonSerialize(using = DictTranslateSerializer.class)
  • 字段會自動從字典中翻譯為對應值

是否需要我打包成一個小型 Spring Boot 示例項目結構?或者幫你升級為支持 AOP 統一翻譯?歡迎繼續提問。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89039.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一個WebUI自動化框架(5)失敗用例截圖與重試

在UI自動化測試用例執行過程中&#xff0c;經常會有很多不確定的因素導致用例執行失敗&#xff0c;比如網絡原因、環境問題等&#xff0c;所以我們有必要引入重試機制&#xff08;失敗重跑&#xff09;&#xff0c;來提高測試用例執行穩定性。準備工作&#xff1a;我們在進行失…

【Oracle】centos7靜默安裝oracle19c

靜默安裝三步驟&#xff1a; 1、數據庫安裝db_install.rsp&#xff08;數據庫軟件安裝響應文件&#xff09;2、配置監聽netca.rap&#xff08;監聽配置響應文件&#xff09;3、建庫dbca.rsp&#xff08;建庫響應文件&#xff09;安裝oracle19c先決條件準備&#xff1a; 1.檢查主…

MCP基礎知識二(實戰通信方式之Streamable HTTP)

介紹 MCP 使用 JSON-RPC 2.0 作為其傳輸格式。傳輸層負責將 MCP 協議消息轉換為 JSON-RPC 格式進行傳輸&#xff0c;并將接收到的 JSON-RPC 消息轉換回 MCP 協議消息。其中SSE被廢棄了&#xff08;Server-Sent Events (SSE) - Deprecated&#xff09; SSE as a standalone tra…

量子計算與AI的融合:開啟智能革命的“量子躍遷”新范式

當量子計算的并行算力與人工智能的深度學習能力相遇,一場顛覆傳統認知的技術革命正在醞釀。從藥物研發到自動駕駛,從金融風控到氣候預測,兩者的融合不僅突破了經典計算的算力天花板,更催生出全新的算法范式與產業生態。本文將深入解析量子計算與AI融合的技術邏輯、核心突破…

【氮化鎵】不同偏壓應力下電荷俘獲效應導致的P-GaN HEMT閾值電壓不穩定性

2022年12月7日,意大利國家研究委員會微電子與微系統研究所的Giuseppe Greco等人在《Applied Physics Letters》期刊發表了題為《Threshold voltage instability by charge trapping effects in the gate region of p-GaN HEMTs》的文章,基于對p-GaN高電子遷移率晶體管(HEMTs…

ONLYOFFICE深度解鎖系列.10-如何識別圖像和PDF掃描件中的文本?用ONLYOFFICE的AI OCR輕松搞定!

ONLYOFFICE 文檔版本 9.0帶來多項 AI 關鍵改進&#xff0c;顯著提升您處理電子表格和 PDF 文件的工作效率。本指南將重點介紹新增的 OCR 功能&#xff0c;并講解如何在 PDF 編輯器中利用 AI 助手將圖像轉為可編輯文本。什么是 OCR 文字識別&#xff1f;OCR 技術能夠掃描各類文檔…

單例模式詳解:確保一個類只有一個實例

在軟件開發中&#xff0c;設計模式是解決常見問題的經典方案。單例模式&#xff08;Singleton Pattern&#xff09;作為創建型設計模式中最簡單也最常用的一種&#xff0c;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。本文將全面探討單例模式的概念、多種實現方式…

Appdynamic 配置 PostgreSQL 收集器

配置 PostgreSQL 收集器 您可以使用數據庫可見性監控任何版本的 PostgreSQL。 連接詳細信息 部分場地描述創建新的收集器數據庫類型您想要監控的數據庫類型。代理人管理收集器的數據庫代理。收藏家姓名您想要用來識別收集器的名稱。連接詳細信息主機名或 IP 地址運行數據庫的機…

其他常見 HTTP 方法

除了最常用的四種方法&#xff08;GET、POST、PUT、DELETE&#xff09;&#xff0c;HTTP 協議還定義了一些較少使用但非常有用的請求方法&#xff0c;常用于調試、部分更新、跨域預檢等場景。1. HEAD 方法&#xff1a;獲取響應頭 特點&#xff1a; 用途&#xff1a;與 GET 類似…

Web應用防火墻(WAF)技術

目錄 一&#xff1a;簡介 1.1 Web安全現狀 1.2 傳統防御的局限性 二&#xff1a;Web應用防火墻技術解析 2.1 WAF核心架構 2.2 關鍵技術特性 三&#xff1a;WAF必要性 3.1 典型防護場景 3.2 與傳統方案對比 四&#xff1a;進階防護方案 4.1 智能WAF架構 4.2 關鍵技術…

機器學習之線性回歸(七)

機器學習之線性回歸&#xff08;七&#xff09; 文章目錄機器學習之線性回歸&#xff08;七&#xff09;一、線性回歸線性回歸超全指南&#xff1a;從“一條直線”到“正則化調參”的完整旅程0. 先對齊語言&#xff1a;標稱型 vs 連續型1. 問題形式化2. 損失函數全景3. 求解方法…

基于開源AI大模型、AI智能名片與S2B2C商城小程序源碼的用戶價值引導與核心用戶沉淀策略研究

摘要&#xff1a;在數字化商業生態中&#xff0c;用戶留存與核心用戶培育是產品成功的關鍵。本文聚焦開源AI大模型、AI智能名片與S2B2C商城小程序源碼的協同應用&#xff0c;探討如何通過技術賦能實現用戶價值引導與核心用戶沉淀。研究結合工業品供應鏈、美妝品牌、健康食品行業…

課題申報書成功率提升85%!借助大模型AI精準選題、搭綜述框架及提煉創新點(附實操AI提示詞)

大家好,感謝關注。我是七哥,一個在高校里不務正業,折騰用大模型AI實操的學術人。可以添加七哥(qige500)交流學術寫作或ChatGPT、Claude等學術大模型AI領域相關問題,多多交流,相互成就,共同進步。 寫一份高質量的課題申報書往往面臨許多困難,對很多同仁來說,難就難在…

Spring之【寫一個簡單的IOC容器EasySpring】

目錄 EasySpring 注解 EasyAutowired EasyComponent EasyComponentScan EasyLazy EasyPostConstruct EasyProtoType EasyValue Bean定義信息 EasyBeanDefinition 管理Bean定義信息 EasyBeanDefinitionRegister Aware EasyAware EasyBeanFactoryAware EasyBea…

Selenium動態網頁爬蟲編寫與解釋

使用Selenium來抓取動態網頁。動態網頁通常是指那些通過JavaScript動態加載內容的網頁&#xff0c;這些內容在初始HTML中并不存在&#xff0c;因此使用傳統的requests庫無法獲取到這些動態生成的內容。Selenium可以模擬瀏覽器行為&#xff0c;等待JavaScript執行并渲染頁面&…

element el-table中使用el-image圖片預覽被其他表格遮擋

或者::v-deep .el-table__cell {position: static !important;}

MyBatis與Spring整合優化實戰指南:從配置到性能調優

一、SqlSessionFactory配置最佳實踐 1.1 數據源配置優化 <!-- Spring配置示例 --> <bean id"dataSource" class"com.zaxxer.hikari.HikariDataSource" destroy-method"close"><property name"driverClassName" value&q…

LUA(初學)

條件語句if if then endlocal a 2 if a < 6 thenprint(a) end2條件語句if else if then else endlocal a 2 local b 3 if a > 6 thenprint(a) elseprint(b) end3while循環語句 while do endlocal a 2 while a < 5 doa a 1print(a) end3 4 5for循環語句 for do …

JMeter 連接與配置 ClickHouse 數據庫

其他人都需要好幾十積分提供jar包&#xff0c;我5積分提供給大家 jar包地址&#xff1a;https://download.csdn.net/download/weixin_41853064/91370401 1、將jar包內的文件放入jmeter/lib/exc目錄并重啟jmeter 2、配置jmeter JDBC連接 3、復制 click hourse的類名&#xff1…

Kmeams聚類算法詳解

文章目錄一、聚類任務的簡介1.1 聚類的核心特征1.2 聚類的典型應用場景二、Kmeans的思想和數學原理2.1 核心思想2.2 數學原理三、Kmeans計算過程示例3.1 數據集3.2 步驟1&#xff1a;確定K值并初始化簇中心3.3 步驟2&#xff1a;計算樣本到簇中心的距離并分配簇3.4 步驟3&#…