Входные и выходные двоичные потоки с помощью ДЖЕРСИ?

Я использую Джерси для реализации УСПОКОИТЕЛЬНОГО API, который является, прежде всего, получают и служат, JSON закодировал данные. Но у меня есть некоторые ситуации, где я должен выполнить следующее:

  • Экспортируйте загружаемые документы, такие как PDF, XLS, ZIP или другие двоичные файлы.
  • Получите многослойные данные, такой некоторый JSON плюс загруженный файл XLS

У меня есть единственная страница основанный на jQuery веб-клиент, который создает вызовы Ajax к этому веб-сервису. В данный момент это не делает, форма отправляет, и использование ДОБИРАЕТСЯ и POST (с объектом JSON). Я должен использовать сообщение формы для отправки данных и приложенного двоичного файла, или я могу создать многослойный запрос с JSON плюс двоичный файл?

Уровень служб моего приложения в настоящее время создает ByteArrayOutputStream, когда он генерирует файл PDF. Что лучший способ состоит в том, чтобы произвести этот поток клиенту через Джерси? Я создал MessageBodyWriter, но я не знаю, как использовать его от ресурса Джерси. Это - правильный подход?

Я просматривал образцы, включенные с Джерси, но еще не нашел ничего, которое иллюстрирует, как сделать любую из этих вещей. Если это имеет значение, я использую Джерси с Jackson, чтобы сделать Объект->, JSON без XML ступают, и действительно не использую JAX-RS.

109
задан Tauren 16 August 2010 в 18:42
поделиться

1 ответ

Мне удалось получить ZIP-файл или PDF-файл, расширив объект StreamingOutput. Вот некоторые примеры кода:

@Path("PDF-file.pdf/")
@GET
@Produces({"application/pdf"})
public StreamingOutput getPDF() throws Exception {
    return new StreamingOutput() {
        public void write(OutputStream output) throws IOException, WebApplicationException {
            try {
                PDFGenerator generator = new PDFGenerator(getEntity());
                generator.generatePDF(output);
            } catch (Exception e) {
                throw new WebApplicationException(e);
            }
        }
    };
}

Класс PDFGenerator (мой собственный класс для создания PDF) берет поток вывода из метода write и пишет в него вместо вновь созданного потока вывода.

Не знаю, лучший ли это способ, но он работает.

108
ответ дан 24 November 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: