package jnpf.limsEntity; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 兼容 String 和 Array 的反序列化器。 * 当前端传入数组(如多选组件)时,保持 JSON 数组字符串格式存储, * 例如 ["项目A","项目B"],便于前端回显时直接解析。 */ public class StringOrArrayDeserializer extends StdDeserializer { public StringOrArrayDeserializer() { super(String.class); } @Override public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { if (p.currentToken() == JsonToken.START_ARRAY) { List list = new ArrayList<>(); while (p.nextToken() != JsonToken.END_ARRAY) { list.add(p.getValueAsString()); } // 存为 JSON 数组字符串,前端回显可直接 JSON.parse StringBuilder sb = new StringBuilder("["); for (int i = 0; i < list.size(); i++) { if (i > 0) sb.append(","); sb.append("\"").append(list.get(i).replace("\"", "\\\"")).append("\""); } sb.append("]"); return sb.toString(); } return p.getValueAsString(); } }