package com.vincent.rsf.server.manager.utils; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author chen.lin * @time 2026-02-02 * Areas 字段自定义序列化器 * 将 List> 序列化为 JSON 数组 * 支持混合类型(Integer 和 Map)的向后兼容 * */ public class AreasSerializer extends JsonSerializer { @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { if (value == null) { gen.writeNull(); return; } if (!(value instanceof List)) { gen.writeObject(value); return; } @SuppressWarnings("unchecked") List list = (List) value; gen.writeStartArray(); for (Object item : list) { if (item instanceof Map) { // 已经是 Map 格式 @SuppressWarnings("unchecked") Map map = (Map) item; gen.writeObject(map); } else if (item instanceof Number) { // 如果是 Number(向后兼容),转换为 Map 格式 Map areaMap = new HashMap<>(); areaMap.put("id", ((Number) item).intValue()); areaMap.put("sort", 1); // 默认排序 gen.writeObject(areaMap); } else { // 其他类型,尝试直接写入 gen.writeObject(item); } } gen.writeEndArray(); } }