diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseAiChatServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseAiChatServiceImpl.java index 0722f4a7..acf0574a 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseAiChatServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseAiChatServiceImpl.java @@ -206,6 +206,14 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService { @Override public void onFailure(@NotNull EventSource eventSource, @Nullable Throwable e, @Nullable Response response) { log.error("调用接口 [{}] 接口异常", request.url(), e); + + // 如果是 content-type 错误,尝试作为普通 HTTP 请求处理 + if (e instanceof IllegalStateException && e.getMessage() != null && e.getMessage().contains("Invalid content-type")) { + log.warn("服务器返回的 Content-Type 不是 text/event-stream,尝试作为普通 HTTP 请求处理"); + CaseAiChatServiceImpl.this.handleAsRegularHttpRequest(request, sseEmitter, conversationData); + return; + } + if (e != null) { sseEmitter.completeWithError(e); } else { @@ -594,6 +602,35 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService { } } + /** + * 当 SSE 失败时,作为普通 HTTP 请求处理 + */ + private void handleAsRegularHttpRequest(Request request, SseEmitter sseEmitter, ConversationData conversationData) { + try { + OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(60, TimeUnit.SECONDS) + .writeTimeout(60, TimeUnit.SECONDS) + .readTimeout(60, TimeUnit.SECONDS) + .build(); + + Response response = client.newCall(request).execute(); + if (response.isSuccessful()) { + String responseBody = response.body().string(); + log.info("作为普通 HTTP 请求处理成功,将响应原封不动推送给前端"); + + // 将响应内容原封不动地推送到 SseEmitter + sseEmitter.send(responseBody); + sseEmitter.complete(); + } else { + log.error("普通 HTTP 请求失败,状态码: {}", response.code()); + sseEmitter.completeWithError(new RuntimeException("HTTP 请求失败,状态码: " + response.code())); + } + } catch (Exception e) { + log.error("处理普通 HTTP 请求异常", e); + sseEmitter.completeWithError(e); + } + } + /** * 对话数据容器 */