From 2724e34dc9e63c1a66c075805cdc19faeba8111c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=A6=82?= <8775@163.com> Date: Wed, 5 Mar 2025 09:34:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EListSerializer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jackson/convert/annotation/Listable.java | 22 ++++++++ .../jackson/convert/serde/ListSerializer.java | 52 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100755 sop-admin/sop-admin-backend/admin-common/src/main/java/com/gitee/sop/admin/common/jackson/convert/annotation/Listable.java create mode 100755 sop-admin/sop-admin-backend/admin-common/src/main/java/com/gitee/sop/admin/common/jackson/convert/serde/ListSerializer.java diff --git a/sop-admin/sop-admin-backend/admin-common/src/main/java/com/gitee/sop/admin/common/jackson/convert/annotation/Listable.java b/sop-admin/sop-admin-backend/admin-common/src/main/java/com/gitee/sop/admin/common/jackson/convert/annotation/Listable.java new file mode 100755 index 00000000..7e747b76 --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-common/src/main/java/com/gitee/sop/admin/common/jackson/convert/annotation/Listable.java @@ -0,0 +1,22 @@ +package com.gitee.sop.admin.common.jackson.convert.annotation; + + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gitee.sop.admin.common.jackson.convert.serde.ListSerializer; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 序列化自动转成数组 + * @author 六如 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@JacksonAnnotationsInside +@JsonSerialize(using = ListSerializer.class) +public @interface Listable { +} diff --git a/sop-admin/sop-admin-backend/admin-common/src/main/java/com/gitee/sop/admin/common/jackson/convert/serde/ListSerializer.java b/sop-admin/sop-admin-backend/admin-common/src/main/java/com/gitee/sop/admin/common/jackson/convert/serde/ListSerializer.java new file mode 100755 index 00000000..ca7ae539 --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-common/src/main/java/com/gitee/sop/admin/common/jackson/convert/serde/ListSerializer.java @@ -0,0 +1,52 @@ +package com.gitee.sop.admin.common.jackson.convert.serde; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; + +/** + *
+ * {@literal
+ * 将数字类型转换成布尔
+ *
+ * 支持:"["a", "b"]", "[1,2]", "1,2,3"
+ *
+ * @Listable
+ * private String appList; // 返回给前端: "appList": ["xx"]
+ *
+ * }
+ * 
+ * + * @author 六如 + */ +@Slf4j +public class ListSerializer extends JsonSerializer { + + + @Override + public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if (value == null) { + jsonGenerator.writeNull(); + return; + } + if (value instanceof String) { + String str = (String) value; + if (JSON.isValidArray(str)) { + String json = String.valueOf(value); + JSONArray array = JSON.parseArray(json); + jsonGenerator.writeObject(array); + } else { + String[] split = str.split(","); + jsonGenerator.writeObject(split); + } + } else { + jsonGenerator.writeObject(value); + } + } + +}