diff --git a/par-api/src/main/java/com/par/api/controller/AdapterController.java b/par-api/src/main/java/com/par/api/controller/AdapterController.java index 0a7ed18..10e6beb 100644 --- a/par-api/src/main/java/com/par/api/controller/AdapterController.java +++ b/par-api/src/main/java/com/par/api/controller/AdapterController.java @@ -103,11 +103,12 @@ public class AdapterController { try { adapterConfig = objectMapper.readValue(configJson, AdapterConfig.class); } catch (Exception e) { return ApiResponse.error(400, "配置格式无效: " + e.getMessage()); } - // 获取该站点所有结果,按URL分组取最新 + // 获取该站点所有结果,按URL分组取最新(过滤无URL的旧数据) List allResults = accessResultMapper.selectBySiteId(siteId); Map latestByUrl = allResults.stream() + .filter(r -> r.getUrl() != null && !r.getUrl().isBlank()) .collect(Collectors.toMap( - r -> r.getUrl() != null && !r.getUrl().isBlank() ? r.getUrl() : "(未指定URL)", + AccessResult::getUrl, r -> r, (a, b) -> a.getCreatedAt().isAfter(b.getCreatedAt()) ? a : b)); @@ -125,6 +126,7 @@ public class AdapterController { Map item = new LinkedHashMap<>(); item.put("url", url); item.put("accessResultId", ar.getId()); + item.put("contentType", ar.getContentType()); item.put("statusCode", ar.getStatusCode()); item.put("responseTimeMs", ar.getResponseTimeMs()); item.put("createdAt", ar.getCreatedAt()); @@ -139,9 +141,11 @@ public class AdapterController { if (content != null) { Map parsed = adapterEngine.extract(adapterConfig, content, ar.getContentType(), url); item.put("parsed", parsed); + } else { + item.put("parsed", Map.of("matched", false, "message", "内容为空,可能已从存储中删除")); } } catch (Exception e) { - item.put("parseError", e.getMessage()); + item.put("parsed", Map.of("matched", false, "message", "解析异常: " + e.getMessage())); } pages.add(item);