From c87c646d4d910531dd4f48efd0ee9e71c173af75 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 7 Jan 2026 14:27:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E7=B4=A0=E6=9D=90API=E6=B5=8B=E8=AF=95=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E9=80=BB=E8=BE=91=EF=BC=8C400=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=B9=9F=E8=A7=86=E4=B8=BA=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ExternalAssetService.java | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/ExternalAssetService.java b/backend/src/main/java/com/designhub/service/ExternalAssetService.java index 7827c35..36ed532 100644 --- a/backend/src/main/java/com/designhub/service/ExternalAssetService.java +++ b/backend/src/main/java/com/designhub/service/ExternalAssetService.java @@ -130,13 +130,16 @@ public class ExternalAssetService { String apiKey = systemConfigService.getConfigValue("external_asset_api_key"); if (apiUrl == null || apiUrl.isEmpty() || apiKey == null || apiKey.isEmpty()) { + log.warn("第三方素材API配置不完整"); return false; } try { - // 测试连接(使用一个测试任务号) + // 测试连接(使用正确格式的测试任务号) String url = apiUrl.endsWith("/") ? apiUrl : apiUrl + "/"; - url = url + "product-assets?taskNo=TEST000000000000"; + url = url + "product-assets?taskNo=TASK000000000000"; + + log.info("测试第三方素材API连接: {}", url); HttpHeaders headers = new HttpHeaders(); headers.set("X-API-Key", apiKey); @@ -150,12 +153,42 @@ public class ExternalAssetService { String.class ); + log.info("测试连接响应状态: {}", response.getStatusCode()); + // 只要能收到响应(无论是404还是200),说明连接正常 return response.getStatusCode().is2xxSuccessful() || response.getStatusCode() == HttpStatus.NOT_FOUND; + } catch (org.springframework.web.client.HttpClientErrorException e) { + // HTTP 4xx 错误 + log.info("测试连接HTTP错误: {} - {}", e.getStatusCode(), e.getResponseBodyAsString()); + + // 400 Bad Request 但是包含业务错误码(如TASK_NOT_FOUND, INVALID_TASK_NO) + // 说明API连接正常,只是参数不对 + if (e.getStatusCode() == HttpStatus.BAD_REQUEST) { + String body = e.getResponseBodyAsString(); + if (body.contains("TASK_NOT_FOUND") || body.contains("INVALID_TASK_NO")) { + log.info("API连接正常,测试任务号不存在或格式不对(这是正常的)"); + return true; + } + } + + // 404 Not Found 也说明连接正常 + if (e.getStatusCode() == HttpStatus.NOT_FOUND) { + log.info("API连接正常,任务不存在(这是正常的)"); + return true; + } + + // 401/403 认证错误 + if (e.getStatusCode() == HttpStatus.UNAUTHORIZED || + e.getStatusCode() == HttpStatus.FORBIDDEN) { + log.error("API密钥无效或权限不足"); + return false; + } + + return false; } catch (Exception e) { - log.error("测试第三方素材API连接失败", e); + log.error("测试第三方素材API连接失败: {}", e.getMessage()); return false; } }