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