package com.ruoyi.basic.dto; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import com.ruoyi.basic.pojo.StorageBlob; import lombok.Data; import java.util.Map; @Data public class StorageBlobDTO extends StorageBlob { /** * 预览地址 */ private String previewURL; /** * 下载地址 */ private String downloadURL; /** * 文件类型 */ private String application; /** * 支持从数字ID或完整JSON对象反序列化 */ @JsonCreator public static StorageBlobDTO from(Object value) { if (value instanceof Number) { StorageBlobDTO dto = new StorageBlobDTO(); dto.setId(((Number) value).longValue()); return dto; } if (value instanceof Map) { @SuppressWarnings("unchecked") Map map = (Map) 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); } }