From 43fe31a4ec6f84d84c58fe4fe801dd2f43a8a83e Mon Sep 17 00:00:00 2001 From: "liu.zixi" Date: Tue, 30 Sep 2025 12:03:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=88=E4=BE=8B=E5=8A=A9=E6=89=8B=EF=BC=9A?= =?UTF-8?q?=E8=81=8A=E5=A4=A9=E6=8E=A5=E5=8F=A3=E5=85=BC=E5=AE=B9applicati?= =?UTF-8?q?on/json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CaseAiChatServiceImpl.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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); + } + } + /** * 对话数据容器 */