mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-06 17:36:47 +08:00
案例助手:聊天接口兼容application/json
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 对话数据容器
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user