- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我已经在我的 Jersey Resource 类中实现了流输出。
@GET
@Path("xxxxx")
@Produces(BulkConstants.TEXT_XML_MEDIA_TYPE})
public Response getFile() {
FeedReturnStreamingOutput sout = new FeedReturnStreamingOutput();
response = Response.ok(sout).build();
return response;
}
class FeedReturnStreamingOutput implements StreamingOutput {
public FeedReturnStreamingOutput()
@Override
public void write(OutputStream outputStream) {
//write into Output Stream
}
}
问题是即使在调用 FeedReturnStreamingOutput 之前从资源发回响应,泽西客户端仍会等待直到 FeedReturnStreamingOutput 执行完成。
客户代码:
Client client = Client.create();
ClientResponse response = webResource
//headers
.get(ClientResponse.class);
//The codes underneath executes after FeedReturnStreamingOutput is executed which undermines the necessity of streaming
OutputStream os = new FileOutputStream("c:\\test\\feedoutput5.txt");
System.out.println(new Date() + " : Reached point A");
if (response.getStatus() == 200) {
System.out.println(new Date() + " : Reached point B");
InputStream io = response.getEntityInputStream();
byte[] buff = new byte[1024000];
int count = 0;
while ((count = io.read(buff, 0, buff.length)) != -1) {
os.write(buff, 0, count);
}
os.close();
io.close();
} else {
System.out.println("Response code :" + response.getStatus());
}
System.out.println("Time taken -->> "+(System.currentTimeMillis()-startTime)+" ms");
最佳答案
问题在于 Jersey 用来缓冲实体以确定 Content-Length header 的缓冲 OutputStream
。缓冲区的大小默认为 8 kb。如果需要,您可以禁用缓冲,或者只是使用属性更改缓冲区的大小
ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER
An integer value that defines the buffer size used to buffer server-side response entity in order to determine its size and set the value of HTTP "Content-Length" header.
If the entity size exceeds the configured buffer size, the buffering would be cancelled and the entity size would not be determined. Value less or equal to zero disable the buffering of the entity at all.
This property can be used on the server side to override the outbound message buffer size value - default or the global custom value set using the "jersey.config.contentLength.buffer" global property.
The default value is 8192.
这是一个例子
@Path("streaming")
public class StreamingResource {
@GET
@Produces("application/octet-stream")
public Response getStream() {
return Response.ok(new FeedReturnStreamingOutput()).build();
}
public static class FeedReturnStreamingOutput implements StreamingOutput {
@Override
public void write(OutputStream output)
throws IOException, WebApplicationException {
try {
for (int i = 0; i < 10; i++) {
output.write(String.format("Hello %d\n", i).getBytes());
output.flush();
TimeUnit.MILLISECONDS.sleep(500);
}
} catch (InterruptedException e) { throw new RuntimeException(e); }
}
}
}
这是没有设置属性的结果
这是将属性值设置为0
public class AppConfig extends ResourceConfig {
public AppConfig() {
...
property(ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER, 0);
}
}
关于java - jersey - StreamingOutput 作为响应实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29637151/
我有一个安静的网络服务。我正在考虑从类中的另一个方法调用一个方法。是否可以?如果是这样,我如何读取下面示例中的流输出的内容?另外,我分别需要这两个函数,以便我可以返回二进制文件或显示文本文件的文本 @
我正在尝试将 StreamingOutput 转换为 Java 中的字符串,以将其传递给另一个方法。它生成字符串,但稍后会引发以下错误。 JAXRSUtils logMessageHandlerPro
我已经在我的 Jersey Resource 类中实现了流输出。 @GET @Path("xxxxx") @Produces(BulkConstants.TEXT_XML_MEDIA_TYPE})
我有两个关于 Jersey 中的 StreamingOutput 的问题: 1) 它是否已被 jax-rs 运行时缓冲?我见过一些在重写 write() 方法时从 OutputStream 对象创建
我在从 StreamingOutput 实现中抛出 WebApplicationException 时遇到困难。我希望下面的代码返回 501,但curl 报告 curl: (52) Empty rep
JAX-RS 提供了 StreamingOutput 接口(interface),我们可以实现它来对我们的响应主体进行原始流处理。 public interface StreamingOutput {
我有一个类,它将视频作为 mp4 文件发送给用户(Http 请求/响应)我想用主要逻辑模拟方法来测试它。我的代码 public StreamingOutput videoAsStream(final
有人可以发布一个示例,说明如何在 Jersey 中将 StreamingOutput 设置为 Response 对象中的实体吗? 我还没有找到这样的例子。 最佳答案 看看这是否有帮助: @GET @P
我们如何使用来自 AngularJS 的 get 请求来下载文件,并使用 REST API 到 Java 作为中间层,并且在 Java 层,数据根据 API 中的查询参数作为输入流。请帮忙 流程如下:
我在 Response 对象中返回一个 StreamingOutput: @GET @Path("/downloadFile/{filename}") @Produces(MediaType.TEXT
我的 ReSTLet 资源遇到问题。它使用 TrueZip 构建 Zip 存档的子集并允许用户下载它。 // Create a Streaming Response Entity. final
我在 spring boot 中创建了一个 web 应用程序,我想在其中使用 Spring MVC rest 框架而不是 jersey。我正在尝试做这样的事情,但它给了我错误。我想要 Spring M
我有一个 Jersey 服务将二进制数据输出为 StreamingOutput、MediaType.APPLICATION_OCTET_STREAM。 如何使用 Jersey 2 实现客户端来处理来自
我正在使用 Jersey StreamingOutput在我们升级到 Jersey 2.16 之前,它一直工作得很好。事情是这样的。我的 StreamingOuput在某些情况下产生输出非常缓慢。我确
我正在做类似于中提到的事情 Example of using StreamingOutput as Response entity in Jersey @GET @Produces(MediaType
StreamingOutput 的OutputStream 是否应该被实现类关闭? java-doc 没有给出任何建议。我猜它只是委托(delegate)给底层 ServletOutputStream
我的网络服务代码 final StreamingOutput stream = new StreamingOutput() { @Override public void write(fina
下面是我用来尝试流回 PDF 的代码。我之前在另一个环境中做过这件事,但由于某种原因,没有调用 StreamingOutput 上的 write() 方法。 没有错误被记录下来,它已经到了在日志中显示
我有一个返回StreamingOutput对象的方法。我想将这个 StreamingOutput 对象写入 Excel 文件。我编写了以下代码,这给了我 java.lang.ClassCastExce
我已使用此方法为我的 REST Web 服务创建一个 API,以便使用 jersey JAX-RS 下载文件: public Response returnFile(String filePath,S
我是一名优秀的程序员,十分优秀!