diff --git a/base/src/main/java/com/tinyengine/it/common/converter/StreamingResponseBodyConverter.java b/base/src/main/java/com/tinyengine/it/common/converter/StreamingResponseBodyConverter.java index 2bbf1ae4..b0dfb05f 100644 --- a/base/src/main/java/com/tinyengine/it/common/converter/StreamingResponseBodyConverter.java +++ b/base/src/main/java/com/tinyengine/it/common/converter/StreamingResponseBodyConverter.java @@ -12,7 +12,6 @@ package com.tinyengine.it.common.converter; - import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; diff --git a/base/src/main/java/com/tinyengine/it/model/dto/ChatRequest.java b/base/src/main/java/com/tinyengine/it/model/dto/ChatRequest.java index 5c866955..f237fc37 100644 --- a/base/src/main/java/com/tinyengine/it/model/dto/ChatRequest.java +++ b/base/src/main/java/com/tinyengine/it/model/dto/ChatRequest.java @@ -14,9 +14,6 @@ import lombok.Data; -import java.util.List; -import java.util.Map; - /** * ChatRequest dto * diff --git a/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AiChatV1ServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AiChatV1ServiceImpl.java index 43b76a02..8248fd3a 100644 --- a/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AiChatV1ServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AiChatV1ServiceImpl.java @@ -25,6 +25,7 @@ import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; import java.io.IOException; +import java.io.OutputStream; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -95,41 +96,54 @@ private StreamingResponseBody processStreamResponse(HttpRequest.Builder requestB return outputStream -> { try { HttpResponse> response = httpClient.send( - requestBuilder.build(), HttpResponse.BodyHandlers.ofLines()); - try (Stream lines = response.body()) { - lines.filter(line -> !line.isEmpty()) - .forEach(line -> { - try { - if (!line.startsWith("data:")) { - line = "data: " + line; - } - if (!line.endsWith("\n\n")) { - line = line + "\n\n"; - } - outputStream.write(line.getBytes(StandardCharsets.UTF_8)); - outputStream.flush(); - } catch (IOException e) { - throw new ServiceException(ExceptionEnum.CM326.getResultCode(), - ExceptionEnum.CM326.getResultMsg()); - } - }); - } + requestBuilder.build(), HttpResponse.BodyHandlers.ofLines()); + processLines(response.body(), outputStream); } catch (Exception e) { - try { - String errorEvent = "data: " + - JsonUtils.encode(Map.of("error", e.getMessage())) + "\n\n"; - outputStream.write(errorEvent.getBytes(StandardCharsets.UTF_8)); - outputStream.flush(); - } catch (IOException ioException) { - throw new ServiceException(ExceptionEnum.CM326.getResultCode(), ExceptionEnum.CM326.getResultMsg()); - } + handleError(e, outputStream); } finally { - try { - outputStream.close(); - } catch (IOException e) { - // 忽略关闭异常 - } + closeStream(outputStream); } }; } + + private void processLines(Stream lines, OutputStream outputStream) { + try (Stream filteredLines = lines.filter(line -> !line.isEmpty())) { + filteredLines.forEach(line -> writeLine(line, outputStream)); + } + } + + private void writeLine(String line, OutputStream outputStream) { + try { + if (!line.startsWith("data:")) { + line = "data: " + line; + } + if (!line.endsWith("\n\n")) { + line = line + "\n\n"; + } + outputStream.write(line.getBytes(StandardCharsets.UTF_8)); + outputStream.flush(); + } catch (IOException e) { + throw new ServiceException(ExceptionEnum.CM326.getResultCode(), + ExceptionEnum.CM326.getResultMsg()); + } + } + + private void handleError(Exception e, OutputStream outputStream) { + try { + String errorEvent = "data: " + JsonUtils.encode(Map.of("error", e.getMessage())) + "\n\n"; + outputStream.write(errorEvent.getBytes(StandardCharsets.UTF_8)); + outputStream.flush(); + } catch (IOException ioException) { + throw new ServiceException(ExceptionEnum.CM326.getResultCode(), ExceptionEnum.CM326.getResultMsg()); + } + } + + private void closeStream(OutputStream outputStream) { + try { + outputStream.close(); + } catch (IOException e) { + // 忽略关闭异常 + } + } + }