Spring предлагает способы возврата вывода, отличные от HTML, включая PDF и электронные таблицы Excel.

Введение в представления документов

HTML-страница не всегда является лучшим способом просмотра пользователем результатов моделирования, а Spring упрощает динамическую генерацию PDF-документа или таблицы Excel на основе данных модели. Документ является представлением и передается с сервера с надлежащим типом содержимого, чтобы (надеемся) позволить клиентскому ПК запустить в ответ свою электронную таблицу или приложение для просмотра PDF.

Для того чтобы использовать представления Excel, необходимо добавить библиотеку Apache POI в свой classpath. Для генерации PDF необходимо добавить (желательно) библиотеку OpenPDF.

По возможности следует использовать последние версии основных библиотек генерации документов. В частности, мы настоятельно рекомендуем OpenPDF (например, OpenPDF 1.2.12) вместо устаревшего оригинального iText 2.1.7, поскольку OpenPDF активно поддерживается и вносит исправление важной уязвимости для ненадежного PDF-контента.

Представления PDF

Простое представление PDF для списка слов может расширять org.springframework.web.servlet.view.document.AbstractPdfView и реализовывать метод buildPdfDocument(), как показано в следующем примере:

Java
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));
        }
    }
}
Kotlin
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 из метода обработчика.