免费搭建购物网站,最简洁wordpress主题,融资融券配资网站建设,空包网站怎么建设学习调用AI接口的时候#xff0c;流式响应都是使用的 Transfer-Encoding: chunked#xff0c;图方便想用RestTemplate#xff0c;但是平时用到的都是直接返回响应对象的类型。使用bing搜索到一种方式#xff0c;使用下面的代码来读取#xff0c;于是掉这个坑里了#xff…学习调用AI接口的时候流式响应都是使用的 Transfer-Encoding: chunked图方便想用RestTemplate但是平时用到的都是直接返回响应对象的类型。使用bing搜索到一种方式使用下面的代码来读取于是掉这个坑里了浪费了我好长时间。
ResponseEntityResource responseEntity restTemplate.exchange(apiUrl, HttpMethod.POST, requestEntity, org.springframework.core.io.Resource.class);
PrintWriter writer httpServletResponse.getWriter();
BufferedReader bufferedReader;
try {bufferedReader new BufferedReader(new InputStreamReader(responseEntity.getBody().getInputStream()));String line;while ((line bufferedReader.readLine()) ! null !(ChatGpt3dot5Request.STREAM_MESSAGE_PREFIX [DONE]).equals(line)) {String message getMessageFromLine(line, ChatGpt3dot5Request.STREAM_MESSAGE_PREFIX);writer.write(message);writer.flush();}
} catch (IOException e) {throw new RuntimeException(e);
}
注意上面的代码是错误的并不会实时读取到数据而是会等到响应全结束之后才能读取到数据。 下面的才是正解
restTemplate.execute(apiUrl, HttpMethod.POST, restTemplate.httpEntityCallback(requestEntity), new ResponseExtractorClientHttpResponse() {Overridepublic ClientHttpResponse extractData(ClientHttpResponse response) throws IOException {InputStream inputStream response.getBody();/** 在这个地方从inputStream中读取数据或者调用自己的方法读取inputStream来处理数据*/return response;}
});