From 5cce09b5c2e520954d85e6e42b9b6f55472dbb59 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期五, 03 二月 2023 00:39:15 +0800 Subject: [PATCH] fix 修复 翻译模块 无法翻译实体属性值为 Null 的字段的问题 --- ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java | 14 ++++++ ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java | 9 +++- ruoyi-ui/src/views/demo/demo/index.vue | 4 +- ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java | 29 ++++++++++++++ ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java | 7 ++- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysNoticeVo.java | 2 6 files changed, 57 insertions(+), 8 deletions(-) diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java index bc833d1..b7d3c71 100644 --- a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.translation.annotation.TranslationType; import com.ruoyi.common.translation.core.TranslationInterface; +import com.ruoyi.common.translation.core.handler.TranslationBeanSerializerModifier; import com.ruoyi.common.translation.core.handler.TranslationHandler; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; @@ -40,8 +41,10 @@ } } TranslationHandler.TRANSLATION_MAPPER.putAll(map); - // todo null鍊煎鐞� -// objectMapper.getSerializerProvider().setNullValueSerializer(); + // 璁剧疆 Bean 搴忓垪鍖栦慨鏀瑰櫒 + objectMapper.setSerializerFactory( + objectMapper.getSerializerFactory() + .withSerializerModifier(new TranslationBeanSerializerModifier())); } } diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java new file mode 100644 index 0000000..fb3f6f7 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.translation.core.handler; + +import com.fasterxml.jackson.databind.BeanDescription; +import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; +import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; + +import java.util.List; + +/** + * Bean 搴忓垪鍖栦慨鏀瑰櫒 瑙e喅 Null 琚崟鐙鐞嗛棶棰� + * + * @author Lion Li + */ +public class TranslationBeanSerializerModifier extends BeanSerializerModifier { + + @Override + public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, + List<BeanPropertyWriter> beanProperties) { + for (BeanPropertyWriter writer : beanProperties) { + // 濡傛灉搴忓垪鍖栧櫒涓� TranslationHandler 鐨勮瘽 灏� Null 鍊间篃浜ょ粰浠栧鐞� + if (writer.getSerializer() instanceof TranslationHandler serializer) { + writer.assignNullSerializer(serializer); + } + } + return beanProperties; + } + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java index 0a8f1b3..69a2e45 100644 --- a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java @@ -41,10 +41,15 @@ if (StringUtils.isNotBlank(translation.mapper())) { value = ReflectUtils.invokeGetter(gen.getCurrentValue(), translation.mapper()); } + // 濡傛灉涓� null 鐩存帴鍐欏嚭 + if (ObjectUtil.isNull(value)) { + gen.writeNull(); + return; + } String result = trans.translation(value, translation.other()); - gen.writeString(StringUtils.isNotBlank(result) ? result : value.toString()); + gen.writeString(result); } else { - gen.writeString(value.toString()); + gen.writeObject(value); } } diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java index 9a6c57c..50d34cb 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java @@ -69,9 +69,15 @@ /** * 鍒涘缓浜� */ - @Translation(type = TransConstant.USER_ID_TO_NAME) @ExcelProperty(value = "鍒涘缓浜�") private Long createBy; + + /** + * 鍒涘缓浜鸿处鍙� + */ + @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy") + @ExcelProperty(value = "鍒涘缓浜鸿处鍙�") + private String createByName; /** * 鏇存柊鏃堕棿 @@ -86,5 +92,11 @@ @ExcelProperty(value = "鏇存柊浜�") private Long updateBy; + /** + * 鏇存柊浜鸿处鍙� + */ + @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "updateBy") + @ExcelProperty(value = "鏇存柊浜鸿处鍙�") + private String updateByName; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysNoticeVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysNoticeVo.java index 06dfbb4..a737453 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysNoticeVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysNoticeVo.java @@ -61,7 +61,7 @@ * 鍒涘缓浜哄悕绉� */ @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy") - private String createByName = ""; + private String createByName; /** * 鍒涘缓鏃堕棿 diff --git a/ruoyi-ui/src/views/demo/demo/index.vue b/ruoyi-ui/src/views/demo/demo/index.vue index 65387c9..c49ce43 100644 --- a/ruoyi-ui/src/views/demo/demo/index.vue +++ b/ruoyi-ui/src/views/demo/demo/index.vue @@ -107,13 +107,13 @@ <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> </template> </el-table-column> - <el-table-column label="鍒涘缓浜�" align="center" prop="createBy" /> + <el-table-column label="鍒涘缓浜�" align="center" prop="createByName" /> <el-table-column label="鏇存柊鏃堕棿" align="center" prop="updateTime" width="180"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> </template> </el-table-column> - <el-table-column label="鏇存柊浜�" align="center" prop="updateBy" /> + <el-table-column label="鏇存柊浜�" align="center" prop="updateByName" /> <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> <el-button -- Gitblit v1.9.3