У меня есть веб-приложение, которое может отображать сгенерированный файл PDF пользователю, используя следующий Java-код на сервере:
@Path("MyDocument.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) {
logger.error("Error getting PDF file.", e);
throw new WebApplicationException(e);
}
}
};
}
Этот код использует тот факт, что мне нужно только столько данныхиз внешнего интерфейса, чтобы сгенерировать PDF, так что это легко сделать с помощью функции GET.
Однако теперь я хочу вернуть PDF более динамично, и мне нужно больше информации отвнешний интерфейс для создания PDF.В других областях я отправляю аналогичные объемы данных и сохраняю их в хранилище данных, используя PUT и @FormParams, например:
@PUT
@Consumes({"application/x-www-form-urlencoded"})
public void put(@FormParam("name") String name,
@FormParam("details") String details,
@FormParam("moreDetails") String moreDetails...
Итак, из-за объема данных, которые мне нужно передатьиз внешнего интерфейса я не могу использовать функцию GET только с параметрами запроса.
Я использую Dojo на внешнем интерфейсе, и все взаимодействия Dojo действительно не знают, что делать с PDF, возвращенным из операции PUT.
Мне бы не хотелось делать это в два шага (сохранить данные, отправленные в пут, а затем запросить PDF) просто потому, что PDF в этом случае более «переходный», и яЯ не хочу, чтобы данные занимали место в моем хранилище данных.
Есть ли способ сделать это, или я думаю, что все неправильно?
Спасибо.