在Spring框架中,可以通过使用StreamingResponseBody
接口来从REST控制器发送流中的文本块。
StreamingResponseBody
接口允许我们以流的形式发送响应,而不是一次性将整个响应加载到内存中。这对于处理大量数据或需要实时生成响应的情况非常有用。
下面是一个示例代码,演示了如何从Spring REST控制器发送流中的文本块:
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
@RestController
public class MyController {
@GetMapping("/stream")
public ResponseEntity<StreamingResponseBody> streamText() {
StreamingResponseBody responseBody = new StreamingResponseBody() {
@Override
public void writeTo(OutputStream outputStream) throws IOException {
// 从流中逐块写入文本数据
String text = "Hello, World!";
byte[] bytes = text.getBytes();
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
int n;
byte[] buffer = new byte[1024];
while ((n = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, n);
outputStream.flush();
}
inputStream.close();
}
};
return ResponseEntity.ok()
.contentType(MediaType.TEXT_PLAIN)
.body(responseBody);
}
}
在上述示例中,我们创建了一个StreamingResponseBody
对象,并实现了writeTo
方法来逐块写入文本数据。在这个例子中,我们将字符串"Hello, World!"作为文本数据发送。
通过使用ResponseEntity
,我们可以设置响应的内容类型为MediaType.TEXT_PLAIN
,并将StreamingResponseBody
对象作为响应体返回。
这样,当客户端请求/stream
接口时,它将收到一个流式的响应,其中包含逐块发送的文本数据。
推荐的腾讯云相关产品和产品介绍链接地址:
请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估和决策。
领取专属 10元无门槛券
手把手带您无忧上云