Приклад використання StreamingOutput як сутності відповіді в Джерсі


75

Чи може хтось опублікувати приклад того, як в Джерсі встановлювати об’єкт StreamingOutputяк Responseоб’єкт?

Я не зміг знайти приклад цього.

Відповіді:


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
AAAAARRRRRRRRRRRRRRRRRRRGH. Я просто витратив чотири години, намагаючись зрозуміти, чому моя служба відпочинку з трикотажу не передавала файли. Я не клав флеш на свого письменника. Ооооооочень надокучливо. Дякую за порятунок!
Буде

2
На жаль, ні специфікація JAX-RS V 1.1, ні Java EE 6 Javadocs не вказують, чи слід закривати даний вихідний потік чи ні. Беручи до уваги попередній коментар, я підозрюю, що вам справді слід викликати OutputStream.close () замість OutputStream.flush (). Це може звільнити деякі внутрішні ресурси, пов’язані з вихідним потоком.
Крістіан Шліхтерле

1
@ 卢 声 远 ShengyuanLu Ви також можете використовувати, MessageBodyWriterале це питання стосувалось потокової передачі з Responseоб’єктом. Коли MessageBodyWriterви зобов'язані писати на OutputStream.
condit

4
Дякую за цю відповідь, але як, чорт візьми, я отримую цей об'єкт StreamingOutput з Response на стороні клієнта ??
koem

3
@prongs + Nagyl: Так, я зрозумів: InputStream is = ClientBuilder.newBuilder (). register (MultiPartFeature.class) .build (). target (BASE_URI) .path ("/ yourservice"). request (). get () .readEntity (InputStream.class); (все в одному "реченні", може бути непогано розділити це на об'єкт "Клієнт", "Ціль" та "Відповідь")
koem,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.