StreamingResponseBody-处理Servlet异步请求 StreamingResponseBody是Spring 4.2版本添加的一个新的接口,在Controller里处理输出流时非常有用...StreamingResponseBody可以很有效的解决这个问题。...大致意思是说一个Controller在处理异步请求的时候,StreamingResponseBody会直接把流写入到response的输出流中,并且不会占用Servlet容器线程。...再看下这个接口内容: public interface StreamingResponseBody { /** * A callback for writing to the response...StreamingResponseBody streamingResponseBody = new StreamingResponseBody() { @Override public void writeTo
- 服务端生成流式下载: 在Controller层返回`StreamingResponseBody`,边生成CSV或Excel边发送到客户端,不存储中间文件。...GetMapping(value = "/export", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public ResponseEntity exportData() { StreamingResponseBody stream = out -> { // 使用writer将数据一行行写入out,同时响应给客户端...响应式编程与流式下载:在处理大数据导出时,使用`StreamingResponseBody`实现服务端流式响应,实时生成和发送数据给客户端,降低内存占用。 3.
value = "/api/file/{id}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public ResponseEntity<StreamingResponseBody...} catch (IOException e) { } }); } 注:如果函数返回类型不写 ResponseEntity<StreamingResponseBody
org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody...java.io.FileInputStream; import java.io.IOException; @GetMapping("/api/download/{filename}") public ResponseEntity<StreamingResponseBody...file.exists()) { return ResponseEntity.notFound().build(); } StreamingResponseBody stream
这个时候,可以使用StreamingResponseBody。...下面是一个例子 /** * 直接发送bytes,适合下载数据用 * @return */ @RequestMapping( value = "/direct" ) public StreamingResponseBody...direct() { StreamingResponseBody streamingResponseBody = new StreamingResponseBody() {...e.printStackTrace(); } } } }; return(streamingResponseBody
可以使用StreamingResponseBody作为返回值处理: @GetMapping("/download") public StreamingResponseBody handle() {...return new StreamingResponseBody() { @Override public void writeTo(OutputStream outputStream...) throws IOException { // write... } }; } StreamingResponseBody也可以放入ResponseEntity
StreamingResponseBody A StreamingResponseBody can be returned to write to the response OutputStream asynchronously...class StreamingResponseBodyController { @RequestMapping("streaming-response-body-hello") public StreamingResponseBody
那么本篇文章主要介绍一下异步模式的高级使用(ResponseBodyEmitter、SseEmitter、StreamingResponseBody) DeferredResult高级使用 上篇博文介绍的它的基本使用...例如文件下载.这样可以通过返回StreamingResponseBody类型的值做到....StreamingResponseBody (很方便的文件下载) 它用于直接将结果写出到Response的OutputStream中; 如文件下载等 ?...接口源码非常简单: @FunctionalInterface public interface StreamingResponseBody { void writeTo(OutputStream outputStream
这时候可以让方法返回StreamingResponseBody,Spring会将二进制流直接返回给客户端。这种方法可以用来向客户端发送图片等数据。...@RequestMapping("/streamBody") public StreamingResponseBody streamBody() { return (output) -> {
org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody...reportService; @RequestMapping(value = "/download", method = RequestMethod.GET) public ResponseEntity<StreamingResponseBody
Spring MVC支持非常非常多的返回值类型,然后针对不同的返回值类型:比如Map、比如ViewName、比如Callable、比如异步的StreamingResponseBody等等都有其对应的处理器做处理...(因为StreamingResponseBody是Spring4.2才出来的~~~它很方便做文件下载) public class StreamingResponseBodyReturnValueHandler...= null && StreamingResponseBody.class.isAssignableFrom(bodyType)); } return false; } @Override..., returnValue, "StreamingResponseBody expected"); StreamingResponseBody streamingBody = (StreamingResponseBody...streamingBody; public StreamingResponseBodyTask(OutputStream outputStream, StreamingResponseBody
StreamingResponseBodyReturnValueHandler 这个用来处理 StreamingResponseBody 或者 ResponseEntity<StreamingResponseBody
ResponseEntity StreamingResponseBodyReturnValueHandler ResponseEntity<StreamingResponseBody
ResponseBodyEmitterReturnValueHandler ResponseEntity StreamingResponseBodyReturnValueHandler ResponseEntity<StreamingResponseBody
StreamingResponseBodyReturnValueHandler:处理返回值类型是Callable/DeferredResult/ListenableFuture/CompletionStage/StreamingResponseBody
1.2、SpringMVC到底支持哪些返回值 ModelAndView Model View ResponseEntity ResponseBodyEmitter StreamingResponseBody
* A {@link org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody} *
WebAsyncTask中的Callable异步任务,处理异步结果 WebAsyncTask返回类型 处理异步结果 StreamingResponseBodyReturnValueHandler 把StreamingResponseBody...封装成Callable,然后执行Callable异步任务,处理异步结果 1.StreamingResponseBody返回类型 2.ResponseEntity返回类型(泛型是StreamingResponseBody
> ResponseBodyEmitter SseEmitter StreamingResponseBody 其它任意类型,Spring
领取专属 10元无门槛券
手把手带您无忧上云