Spring предлагает способы возврата вывода, отличные от HTML, включая PDF и электронные таблицы Excel.
Введение в представления документов
HTML-страница не всегда является лучшим способом просмотра пользователем результатов моделирования, а Spring упрощает динамическую генерацию PDF-документа или таблицы Excel на основе данных модели. Документ является представлением и передается с сервера с надлежащим типом содержимого, чтобы (надеемся) позволить клиентскому ПК запустить в ответ свою электронную таблицу или приложение для просмотра PDF.
Для того чтобы использовать представления Excel, необходимо добавить библиотеку Apache POI в свой classpath. Для генерации PDF необходимо добавить (желательно) библиотеку OpenPDF.
Представления PDF
Простое представление PDF для списка слов может расширять org.springframework.web.servlet.view.document.AbstractPdfView
и реализовывать метод buildPdfDocument()
, как показано в следующем примере:
public class PdfWordList extends AbstractPdfView {
protected void buildPdfDocument(Map<String, Object> model, Document doc, PdfWriter writer,
HttpServletRequest request, HttpServletResponse response) throws Exception {
List<String> words = (List<String>) model.get("wordList");
for (String word : words) {
doc.add(new Paragraph(word));
}
}
}
class PdfWordList : AbstractPdfView() {
override fun buildPdfDocument(model: Map<String, Any>, doc: Document, writer: PdfWriter,
request: HttpServletRequest, response: HttpServletResponse) {
val words = model["wordList"] as List<String>
for (word in words) {
doc.add(Paragraph(word))
}
}
}
Контроллер может вернуть такое представление либо из внешнего определения представления (ссылаясь на него по имени), либо как экземпляр View
из метода обработчика.
Представления Excel
Начиная с версии Spring Framework 4.2, org.springframework.web.servlet.view.document.AbstractXlsView
предоставляется в качестве базового класса для представлений Excel. Он основывается на Apache POI со специализированными подклассами(AbstractXlsxView
и AbstractXlsxStreamingView
), которые заменяют устаревший класс AbstractExcelView
.
Модель программирования аналогична AbstractPdfView
, с buildExcelDocument()
в качестве центрального шаблонного метода и контроллерами, способными возвращать такое представление из внешнего определения (по имени) или как экземпляр View
из метода обработчика.