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; + } +} + +