src/main/java/com/ruoyi/basic/dto/StorageBlobDTO.java
@@ -5,6 +5,8 @@
import com.ruoyi.basic.pojo.StorageBlob;
import lombok.Data;
import java.util.Map;
@Data
public class StorageBlobDTO extends StorageBlob {
    /**
@@ -23,7 +25,7 @@
    private String application;
    /**
     * 支持从数字ID反序列化(前端可能只传ID)
     * 支持从数字ID或完整JSON对象反序列化
     */
    @JsonCreator
    public static StorageBlobDTO from(Object value) {
@@ -32,6 +34,47 @@
            dto.setId(((Number) value).longValue());
            return dto;
        }
        if (value instanceof Map) {
            @SuppressWarnings("unchecked")
            Map<String, Object> map = (Map<String, Object>) value;
            StorageBlobDTO dto = new StorageBlobDTO();
            if (map.get("id") instanceof Number) {
                dto.setId(((Number) map.get("id")).longValue());
            }
            if (map.get("resourceKey") instanceof String) {
                dto.setResourceKey((String) map.get("resourceKey"));
            }
            if (map.get("contentType") instanceof String) {
                dto.setContentType((String) map.get("contentType"));
            }
            if (map.get("originalFilename") instanceof String) {
                dto.setOriginalFilename((String) map.get("originalFilename"));
            }
            if (map.get("uidFilename") instanceof String) {
                dto.setUidFilename((String) map.get("uidFilename"));
            }
            if (map.get("byteSize") instanceof Number) {
                dto.setByteSize(((Number) map.get("byteSize")).longValue());
            }
            if (map.get("path") instanceof String) {
                dto.setPath((String) map.get("path"));
            }
            if (map.get("previewURL") instanceof String) {
                dto.setPreviewURL((String) map.get("previewURL"));
            }
            if (map.get("downloadURL") instanceof String) {
                dto.setDownloadURL((String) map.get("downloadURL"));
            }
            return dto;
        }
        if (value instanceof String) {
            try {
                StorageBlobDTO dto = new StorageBlobDTO();
                dto.setId(Long.parseLong((String) value));
                return dto;
            } catch (NumberFormatException ignored) {
            }
        }
        throw new IllegalArgumentException("无法反序列化 StorageBlobDTO: " + value);
    }
}