refactor: 解析只用Groovy脚本,无脚本直接报错,移除Java引擎兜底

This commit is contained in:
mediabot-pt
2026-07-01 10:26:04 +08:00
parent 70b1aeda3f
commit 3073653296

View File

@@ -1,8 +1,6 @@
package com.par.api.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.par.core.adapter.AdapterConfig;
import com.par.core.adapter.AdapterEngine;
import com.par.core.adapter.GroovyScriptEngine;
import com.par.core.dto.ApiResponse;
import com.par.core.entity.AccessResult;
import com.par.core.entity.SiteConfig;
@@ -24,12 +22,10 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class AdapterController {
private final AdapterEngine adapterEngine;
private final GroovyScriptEngine groovyEngine;
private final SiteConfigMapper siteConfigMapper;
private final AccessResultMapper accessResultMapper;
private final CachedStorageService storageService;
private static final ObjectMapper objectMapper = new ObjectMapper();
/**
* 用指定适配配置解析指定访问结果
@@ -45,38 +41,26 @@ public class AdapterController {
return ApiResponse.error(400, "configId and accessResultId are required");
}
// 加载适配配置
SiteConfig siteConfig = siteConfigMapper.selectById(configId);
if (siteConfig == null) return ApiResponse.error(404, "配置不存在");
if (siteConfig.getScriptStoragePath() == null || siteConfig.getScriptStoragePath().isBlank()) {
return ApiResponse.error(400, "该配置未绑定 Groovy 脚本");
}
String configJson;
try { configJson = storageService.read(siteConfig.getStoragePath()); }
catch (Exception e) { return ApiResponse.error(500, "读取配置失败: " + e.getMessage()); }
if (configJson == null) return ApiResponse.error(404, "配置内容为空");
String script;
try { script = storageService.read(siteConfig.getScriptStoragePath()); }
catch (Exception e) { return ApiResponse.error(500, "读取脚本失败: " + e.getMessage()); }
if (script == null || script.isBlank()) return ApiResponse.error(404, "Groovy 脚本为空");
AdapterConfig adapterConfig;
try { adapterConfig = objectMapper.readValue(configJson, AdapterConfig.class); }
catch (Exception e) { return ApiResponse.error(400, "配置格式无效: " + e.getMessage()); }
// 加载访问结果 HTML
AccessResult accessResult = accessResultMapper.selectById(accessResultId);
if (accessResult == null) return ApiResponse.error(404, "访问结果不存在");
String html;
try { html = storageService.read(accessResult.getStoragePath()); }
catch (Exception e) { return ApiResponse.error(500, "读取访问结果失败: " + e.getMessage()); }
if (html == null) return ApiResponse.error(404, "访问结果内容为空");
String content;
try { content = storageService.read(accessResult.getStoragePath()); }
catch (Exception e) { return ApiResponse.error(500, "读取内容失败: " + e.getMessage()); }
if (content == null) return ApiResponse.error(404, "内容为空");
// 执行解析
Map<String, Object> result;
try {
result = adapterEngine.extract(adapterConfig, html, accessResult.getUrl());
} catch (Exception e) {
log.error("Adapter parse error", e);
return ApiResponse.error(500, "解析异常: " + e.getMessage());
}
return ApiResponse.success(result);
return ApiResponse.success(groovyEngine.execute(script, content, accessResult.getUrl()));
}
/**
@@ -138,24 +122,22 @@ public class AdapterController {
item.put("invalidCount", allResults.stream().filter(r -> url.equals(r.getUrl()) && Boolean.FALSE.equals(r.getIsValid())).count());
item.put("uncheckedCount", allResults.stream().filter(r -> url.equals(r.getUrl()) && r.getIsValid() == null).count());
// 解析内容:优先 Groovy 脚本,否则用 Java 引擎
// 解析内容:必须有 Groovy 脚本
try {
String content = storageService.read(ar.getStoragePath());
if (content != null) {
Map<String, Object> parsed;
if (siteConfig.getScriptStoragePath() != null && !siteConfig.getScriptStoragePath().isBlank()) {
String script = storageService.read(siteConfig.getScriptStoragePath());
if (script != null && !script.isBlank()) {
parsed = groovyEngine.execute(script, content, url);
} else {
parsed = adapterEngine.extract(adapterConfig, content, ar.getContentType(), url);
}
} else {
parsed = adapterEngine.extract(adapterConfig, content, ar.getContentType(), url);
}
item.put("parsed", parsed);
if (siteConfig.getScriptStoragePath() == null || siteConfig.getScriptStoragePath().isBlank()) {
item.put("parsed", Map.of("matched", false, "message", "该配置未绑定 Groovy 脚本"));
} else {
item.put("parsed", Map.of("matched", false, "message", "内容为空"));
String script = storageService.read(siteConfig.getScriptStoragePath());
if (script == null || script.isBlank()) {
item.put("parsed", Map.of("matched", false, "message", "Groovy 脚本为空"));
} else {
String content = storageService.read(ar.getStoragePath());
if (content == null) {
item.put("parsed", Map.of("matched", false, "message", "内容为空"));
} else {
item.put("parsed", groovyEngine.execute(script, content, url));
}
}
}
} catch (Exception e) {
item.put("parsed", Map.of("matched", false, "message", "解析异常: " + e.getMessage()));