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