in spring-ai-alibaba-mcp/spring-ai-alibaba-mcp-nacos-dynamic-server/src/main/java/com/alibaba/cloud/ai/mcp/dynamic/server/jsontemplate/ResponseTemplateParser.java [41:89]
public static String parse(String rawResponse, String responseTemplate) {
if (!StringUtils.hasText(responseTemplate) || "{{.}}".equals(responseTemplate.trim())) {
// 原样输出
return rawResponse;
}
// jsonPath 提取
if (responseTemplate.trim().startsWith("$.") || responseTemplate.trim().startsWith("$[")) {
try {
Object result = JsonPath.read(rawResponse, responseTemplate.trim());
return result != null ? result.toString() : "";
}
catch (Exception e) {
// jsonPath 失败,降级为模板处理
}
}
// 模板变量替换
try {
Map<String, Object> context = null;
boolean isJson = rawResponse.trim().startsWith("{") || rawResponse.trim().startsWith("[");
if (isJson) {
context = objectMapper.readValue(rawResponse, Map.class);
}
StringBuffer sb = new StringBuffer();
Matcher matcher = TEMPLATE_PATTERN.matcher(responseTemplate);
while (matcher.find()) {
String key = matcher.group(1);
String value;
if (key == null || key.isEmpty()) {
// {{.}} 变量,直接替换为原始响应
value = rawResponse;
}
else if (context != null && context.containsKey(key)) {
value = String.valueOf(context.get(key));
}
else {
value = "";
}
matcher.appendReplacement(sb, Matcher.quoteReplacement(value));
}
matcher.appendTail(sb);
return sb.toString();
}
catch (Exception e) {
// 模板处理失败,降级为原样输出
return rawResponse;
}
}