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}') }} - + - +