From 5cce09b5c2e520954d85e6e42b9b6f55472dbb59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 3 Feb 2023 00:39:15 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=20=E6=97=A0=E6=B3=95=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E5=B1=9E=E6=80=A7=E5=80=BC=E4=B8=BA=20Null?= =?UTF-8?q?=20=E7=9A=84=E5=AD=97=E6=AE=B5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../translation/config/TranslationConfig.java | 7 +++-- .../TranslationBeanSerializerModifier.java | 29 +++++++++++++++++++ .../core/handler/TranslationHandler.java | 9 ++++-- .../com/ruoyi/demo/domain/vo/TestDemoVo.java | 14 ++++++++- .../ruoyi/system/domain/vo/SysNoticeVo.java | 2 +- ruoyi-ui/src/views/demo/demo/index.vue | 4 +-- 6 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java 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 bc833d191..b7d3c7158 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 @@ package com.ruoyi.common.translation.config; 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 @@ public class TranslationConfig { } } 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 000000000..fb3f6f720 --- /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 序列化修改器 解决 Null 被单独处理问题 + * + * @author Lion Li + */ +public class TranslationBeanSerializerModifier extends BeanSerializerModifier { + + @Override + public List changeProperties(SerializationConfig config, BeanDescription beanDesc, + List 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 0a8f1b357..69a2e4536 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 @@ public class TranslationHandler extends JsonSerializer implements Contex 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 9a6c57c27..50d34cbd6 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,10 +69,16 @@ public class TestDemoVo implements Serializable { /** * 创建人 */ - @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 @@ public class TestDemoVo implements Serializable { @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 06dfbb40f..a737453d6 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 @@ public class SysNoticeVo implements Serializable { * 创建人名称 */ @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 65387c9a5..c49ce43bb 100644 --- a/ruoyi-ui/src/views/demo/demo/index.vue +++ b/ruoyi-ui/src/views/demo/demo/index.vue @@ -107,13 +107,13 @@ {{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }} - + - +