From 8c2afa97e5390eeee1f8d15975fb13611f45f411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A1=BE=E5=90=9B=E7=A6=B9?= <2673609096@qq.com> Date: Thu, 21 Aug 2025 15:29:15 +0800 Subject: [PATCH] =?UTF-8?q?farm=E6=A8=A1=E5=9D=97-=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StringOrArrayToStringDeserializer.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/framework/json/StringOrArrayToStringDeserializer.java diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/framework/json/StringOrArrayToStringDeserializer.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/framework/json/StringOrArrayToStringDeserializer.java new file mode 100644 index 00000000..a759f5ed --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/framework/json/StringOrArrayToStringDeserializer.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.farm.framework.json; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 支持字符串或字符串数组反序列化为逗号分隔的字符串 + */ +public class StringOrArrayToStringDeserializer extends JsonDeserializer { + + @Override + public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + JsonToken currentToken = p.getCurrentToken(); + if (currentToken == JsonToken.VALUE_STRING) { + return p.getValueAsString(); + } + if (currentToken == JsonToken.START_ARRAY) { + List values = new ArrayList<>(); + while (p.nextToken() != JsonToken.END_ARRAY) { + if (p.getCurrentToken() == JsonToken.VALUE_STRING) { + values.add(p.getValueAsString()); + } else { + // 跳过非字符串元素 + p.skipChildren(); + } + } + return values.stream().filter(s -> s != null && !s.isEmpty()).distinct().collect(Collectors.joining(",")); + } + // 其他类型,跳过 + p.skipChildren(); + return null; + } +} + +