From da94e89825eb70bf05f245c73f48567c109b8887 Mon Sep 17 00:00:00 2001 From: itino Date: Thu, 17 Nov 2022 16:41:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=98=A0=E5=B0=84=E6=B3=A8=E8=A7=A3=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E6=A0=B9=E6=8D=AE=E5=AD=97=E6=AE=B5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=88sys=5Fdict=5Fdata=E8=A1=A8=EF=BC=89.dict=5Ftype=20?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=AF=B9=E5=BA=94=E7=9A=84=20value=20?= =?UTF-8?q?=E5=92=8C=20label?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/annotation/DictDataMapper.java | 24 +++++++++ .../jackson/DictDataJsonSerializer.java | 53 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/DictDataMapper.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/jackson/DictDataJsonSerializer.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DictDataMapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DictDataMapper.java new file mode 100644 index 000000000..a07e133b9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DictDataMapper.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.annotation; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.ruoyi.common.jackson.DictDataJsonSerializer; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 字典数据映射注解 + * + * @author itino + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.METHOD}) +@JacksonAnnotationsInside +@JsonSerialize(using = DictDataJsonSerializer.class) +public @interface DictDataMapper { + + String dictType() default ""; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/jackson/DictDataJsonSerializer.java b/ruoyi-common/src/main/java/com/ruoyi/common/jackson/DictDataJsonSerializer.java new file mode 100644 index 000000000..7ef60d140 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/jackson/DictDataJsonSerializer.java @@ -0,0 +1,53 @@ +package com.ruoyi.common.jackson; + +import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import com.ruoyi.common.annotation.DictDataMapper; +import com.ruoyi.common.core.service.DictService; +import com.ruoyi.common.utils.spring.SpringUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; + +import java.io.IOException; +import java.util.Objects; + +/** + * 字典数据json序列化工具 + * + * @author itino + */ +@Slf4j +public class DictDataJsonSerializer extends JsonSerializer implements ContextualSerializer { + + private String dictType; + + @Override + public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + try { + String label = SpringUtils.getBean(DictService.class).getDictLabel(dictType, value); + if (StrUtil.isNotBlank(label)) { + gen.writeString(label); + } else { + gen.writeString(value); + } + } catch (BeansException e) { + log.error("字典数据未查到, 采用默认处理 => {}", e.getMessage()); + gen.writeString(value); + } + } + + @Override + public JsonSerializer createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException { + DictDataMapper anno = property.getAnnotation(DictDataMapper.class); + if (Objects.nonNull(anno) && StrUtil.isNotBlank(anno.dictType())) { + this.dictType = anno.dictType(); + return this; + } + return prov.findValueSerializer(property.getType(), property); + } +} From e41a58b10d0e246c54aff7fd722f0505b082118f Mon Sep 17 00:00:00 2001 From: itino Date: Thu, 17 Nov 2022 17:28:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?update=20=20=E5=AD=97=E5=85=B8=E6=95=B0?= =?UTF-8?q?=E6=8D=AEjson=E5=BA=8F=E5=88=97=E5=8C=96=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E5=8A=A0=E4=B8=80=E4=B8=AA=20bean=E7=9A=84=E9=9D=9E=E7=A9=BA?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/jackson/DictDataJsonSerializer.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/jackson/DictDataJsonSerializer.java b/ruoyi-common/src/main/java/com/ruoyi/common/jackson/DictDataJsonSerializer.java index 7ef60d140..295028386 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/jackson/DictDataJsonSerializer.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/jackson/DictDataJsonSerializer.java @@ -1,5 +1,6 @@ package com.ruoyi.common.jackson; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.BeanProperty; @@ -29,9 +30,10 @@ public class DictDataJsonSerializer extends JsonSerializer implements Co @Override public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { try { - String label = SpringUtils.getBean(DictService.class).getDictLabel(dictType, value); - if (StrUtil.isNotBlank(label)) { - gen.writeString(label); + DictService dictService = SpringUtils.getBean(DictService.class); + if (ObjectUtil.isNotNull(dictService)) { + String label = dictService.getDictLabel(dictType, value); + gen.writeString(StrUtil.isNotBlank(label) ? label : value); } else { gen.writeString(value); }