疯狂的狮子Li
2023-02-03 5cce09b5c2e520954d85e6e42b9b6f55472dbb59
fix 修复 翻译模块 无法翻译实体属性值为 Null 的字段的问题
已添加1个文件
已修改5个文件
65 ■■■■ 文件已修改
ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysNoticeVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/demo/demo/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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()));
    }
}
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<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;
    }
}
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);
        }
    }
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;
}
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;
    /**
     * åˆ›å»ºæ—¶é—´
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