Я использую Джерси для реализации RESTful API, который в основном извлекает и обслуживает данные в кодировке JSON. Но у меня бывают ситуации, когда мне нужно выполнить следующее:
- Экспортируйте загружаемые документы, например PDF, XLS, ZIP или другие двоичные файлы.
- Получение составных данных, таких как JSON плюс загруженный файл XLS
У меня есть одностраничный веб-клиент на основе JQuery, который создает вызовы AJAX для этой веб-службы. На данный момент он не отправляет формы и использует GET и POST (с объектом JSON). Должен ли я использовать сообщение формы для отправки данных и прикрепленного двоичного файла, или я могу создать многостраничный запрос с JSON плюс двоичный файл?
Уровень обслуживания моего приложения в настоящее время создает ByteArrayOutputStream при создании файла PDF. Как лучше всего вывести этот поток клиенту через Джерси? Я создал MessageBodyWriter, но не знаю, как его использовать из ресурса Джерси. Это правильный подход?
Я просматривал образцы, включенные в Jersey, но пока не нашел ничего, что иллюстрирует, как сделать что-то из этого. Если это важно, я использую Джерси с Джексоном для выполнения Object-> JSON без шага XML и на самом деле не использую JAX-RS.
Response
объект. Таким образом, вы можете легко управлять типом медиа, кодом ответа HTTP и т. Д. Сообщите мне, если вы хотите, чтобы я разместил код.Мне пришлось вернуть файл rtf, и это сработало для меня.
источник
Я использую этот код для экспорта файла Excel (xlsx) (Apache Poi) в трикотаж в качестве вложения.
источник
Вот еще один пример. Я создаю QRCode как PNG через файл
ByteArrayOutputStream
. Ресурс возвращаетResponse
объект, а данные потока являются сущностью.Чтобы проиллюстрировать обработку кода ответа, я добавил обработку заголовков кеша (
If-modified-since
,If-none-matches
и т. Д.).Пожалуйста, не бейте меня, если у меня
stream.toByteArray()
нет памяти :) Это работает с моими файлами PNG размером <1 КБ ...источник
Я составлял свои сервисы Jersey 1.17 следующим образом:
FileStreamingOutput
GET
И клиент, если он вам нужен:
Client
источник
В этом примере показано, как опубликовать файлы журналов в JBoss через ресурс отдыха. Обратите внимание, что метод get использует интерфейс StreamingOutput для потоковой передачи содержимого файла журнала.
}
источник
Использование Jersey 2.16. Загрузить файл очень просто.
Ниже приведен пример ZIP-файла
источник
Я нашел следующее полезным для меня, и я хотел поделиться, если это поможет вам или кому-то еще. Я хотел что-то вроде MediaType.PDF_TYPE, которого не существует, но этот код делает то же самое:
См. Http://jersey.java.net/nonav/apidocs/1.1.0-ea/contribs/jersey-multipart/com/sun/jersey/multipart/file/DefaultMediaTypePredictor.CommonMediaTypes.html
В моем случае я отправлял PDF-документ на другой сайт:
Затем p передается в качестве второго параметра функции post ().
Эта ссылка помогла мне собрать этот фрагмент кода: http://jersey.576304.n2.nabble.com/Multipart-Post-td4252846.html
источник
Это отлично сработало со мной url: http://example.com/rest/muqsith/get-file?filePath=C : \ Users \ I066807 \ Desktop \ test.xml
источник
Response.ok("file path null").build();
, действительно ли это нормально? Вам, вероятно, следует использовать что-то вродеResponse.status(Status.BAD_REQUEST).entity(...
Еще один пример кода, в котором вы можете загрузить файл в службу REST, служба REST заархивирует файл, а клиент загрузит ZIP-файл с сервера. Это хороший пример использования двоичных входных и выходных потоков с помощью Джерси.
https://stackoverflow.com/a/32253028/15789
Этот ответ был опубликован мной в другой ветке. Надеюсь это поможет.
источник