在Jersey中将StreamingOutput用作响应实体的示例


75

有人可以发布一个示例,说明如何在Jersey中将其设置StreamingOutputResponse对象中的实体吗?

我还没有找到一个例子。

Answers:


123

看看这是否有帮助:

@GET
@Produces(MediaType.TEXT_PLAIN)
public Response streamExample() {
  StreamingOutput stream = new StreamingOutput() {
    @Override
    public void write(OutputStream os) throws IOException,
    WebApplicationException {
      Writer writer = new BufferedWriter(new OutputStreamWriter(os));
      writer.write("test");
      writer.flush();  // <-- This is very important.  Do not forget.
    }
  };
  return Response.ok(stream).build();
}

29
AAAAARRRRRRRRRRRRRRRRRRRRGH。我只花了四个小时试图弄清楚为什么我的球衣休息服务没有传输文件。我没有对我的作家发白。太烦了。谢谢你救我!
2012年

2
不幸的是,JAX-RS V 1.1规范和Java EE 6 Javadocs都没有指定是否应关闭给定的输出流。考虑到前面的评论,我怀疑您确实应该调用OutputStream.close()而不是OutputStream.flush()。这可以释放一些与输出流关联的内部资源。
Christian Schlichtherle

1
@卢声远ShengyuanLu您也可以使用a,MessageBodyWriter但是这个问题是关于与Response对象的流传输。随着MessageBodyWriter您有义务写的OutputStream
2014年

4
感谢您提供此答案,但是如何从客户端的Response中获得此StreamingOutput对象呢?
koem 2014年

3
@prongs + Nagyl:是的,我知道了:InputStream是= ClientBuilder.newBuilder()。register(MultiPartFeature.class).build()。target(BASE_URI).path(“ / yourservice”)。request()。get ().readEntity(InputStream.class); (全部包含在一个“句子中”,最好将其分为“客户端”,“目标”和“响应”对象)
koem 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.