From e6481a011bb770773405db6f3a93fd07fb738dd7 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Wed, 15 Oct 2025 16:32:21 +0200 Subject: [PATCH] Deprecate "feed" and "document" view packages Prior to this commit, Spring Framework would ship several abstract `*View` implementations for rendering PDF, RSS or XLS documents using well-known libraries. More recently, supporting libraries evolved a lot with new versions and forks. Spring Framework is not in a position to efficiently support all variants within the project. This commit deprecates the relevant classes. Instead, libraries can reuse existing code and ship optional support for Spring directly. Often, updating imports and library usage is enough. As an alternative, applications can decide to perform rendering direclty in web handlers. Closes gh-35451 --- .../modules/ROOT/pages/web/webmvc-view/mvc-document.adoc | 4 ++++ .../modules/ROOT/pages/web/webmvc-view/mvc-feeds.adoc | 4 ++++ .../web/servlet/view/document/AbstractPdfStamperView.java | 3 +++ .../web/servlet/view/document/AbstractPdfView.java | 3 +++ .../web/servlet/view/document/AbstractXlsView.java | 3 +++ .../web/servlet/view/document/AbstractXlsxStreamingView.java | 4 ++++ .../web/servlet/view/document/AbstractXlsxView.java | 4 ++++ .../web/servlet/view/feed/AbstractAtomFeedView.java | 4 ++++ .../web/servlet/view/feed/AbstractFeedView.java | 3 +++ .../web/servlet/view/feed/AbstractRssFeedView.java | 4 ++++ .../web/servlet/view/document/XlsViewTests.java | 1 + .../web/servlet/view/feed/AtomFeedViewTests.java | 1 + .../web/servlet/view/feed/RssFeedViewTests.java | 1 + 13 files changed, 39 insertions(+) diff --git a/framework-docs/modules/ROOT/pages/web/webmvc-view/mvc-document.adoc b/framework-docs/modules/ROOT/pages/web/webmvc-view/mvc-document.adoc index 73e1e7c27e5..d1e50c6e53a 100644 --- a/framework-docs/modules/ROOT/pages/web/webmvc-view/mvc-document.adoc +++ b/framework-docs/modules/ROOT/pages/web/webmvc-view/mvc-document.adoc @@ -4,10 +4,14 @@ Spring offers ways to return output other than HTML, including PDF and Excel spreadsheets. This section describes how to use those features. +WARNING: As of Spring Framework 7.0, view classes in the `org.springframework.web.servlet.view.document` +package are deprecated. Instead, libraries can adapt this existing code to provide support with their own `*View` types. +As an alternative, applications can perform direct rendering in web handlers. [[mvc-view-document-intro]] == Introduction to Document Views + An HTML page is not always the best way for the user to view the model output, and Spring makes it simple to generate a PDF document or an Excel spreadsheet dynamically from the model data. The document is the view and is streamed from the diff --git a/framework-docs/modules/ROOT/pages/web/webmvc-view/mvc-feeds.adoc b/framework-docs/modules/ROOT/pages/web/webmvc-view/mvc-feeds.adoc index 825dfd46607..78069fc588c 100644 --- a/framework-docs/modules/ROOT/pages/web/webmvc-view/mvc-feeds.adoc +++ b/framework-docs/modules/ROOT/pages/web/webmvc-view/mvc-feeds.adoc @@ -1,6 +1,10 @@ [[mvc-view-feeds]] = RSS and Atom +WARNING: As of Spring Framework 7.0, view classes in the `org.springframework.web.servlet.view.feed` +package are deprecated. Instead, libraries can adapt this existing code to provide support with their own `*View` types. +As an alternative, applications can perform direct rendering in web handlers. + Both `AbstractAtomFeedView` and `AbstractRssFeedView` inherit from the `AbstractFeedView` base class and are used to provide Atom and RSS Feed views, respectively. They are based on https://rometools.github.io/rome/[ROME] project and are located in the diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfStamperView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfStamperView.java index 0dbaa283dc8..535561cb89a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfStamperView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfStamperView.java @@ -45,7 +45,10 @@ import org.springframework.web.servlet.view.AbstractUrlBasedView; * @author Juergen Hoeller * @since 2.5.4 * @see AbstractPdfView + * @deprecated since 7.0. Libraries or applications can provide their own {@code View} + * class or perform rendering in web handlers directly. */ +@Deprecated(since = "7.0", forRemoval = true) public abstract class AbstractPdfStamperView extends AbstractUrlBasedView { public AbstractPdfStamperView(){ diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfView.java index e81b63fe922..be08857b1f5 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfView.java @@ -48,7 +48,10 @@ import org.springframework.web.servlet.view.AbstractView; * @author Juergen Hoeller * @author Jean-Pierre Pawlak * @see AbstractPdfStamperView + * @deprecated since 7.0. Libraries or applications can provide their own {@code View} + * class or perform rendering in web handlers directly. */ +@Deprecated(since = "7.0", forRemoval = true) public abstract class AbstractPdfView extends AbstractView { /** diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsView.java index faf796e710b..a840e11b7b6 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsView.java @@ -36,7 +36,10 @@ import org.springframework.web.servlet.view.AbstractView; * * @author Juergen Hoeller * @since 4.2 + * @deprecated since 7.0. Libraries or applications can provide their own {@code View} + * class or perform rendering in web handlers directly. */ +@Deprecated(since = "7.0", forRemoval = true) public abstract class AbstractXlsView extends AbstractView { /** diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxStreamingView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxStreamingView.java index 94c3b7bcd5c..2c2dca23967 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxStreamingView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxStreamingView.java @@ -33,7 +33,11 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook; * * @author Juergen Hoeller * @since 4.2 + * @deprecated since 7.0. Libraries or applications can provide their own {@code View} + * class or perform rendering in web handlers directly. */ +@Deprecated(since = "7.0", forRemoval = true) +@SuppressWarnings("removal") public abstract class AbstractXlsxStreamingView extends AbstractXlsxView { /** diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxView.java index 802a542ee5c..cbcd2fb60d7 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxView.java @@ -31,7 +31,11 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; * * @author Juergen Hoeller * @since 4.2 + * @deprecated since 7.0. Libraries or applications can provide their own {@code View} + * class or perform rendering in web handlers directly. */ +@Deprecated(since = "7.0", forRemoval = true) +@SuppressWarnings("removal") public abstract class AbstractXlsxView extends AbstractXlsView { /** diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.java index ca59283e0bf..c05cb8a8ccb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.java @@ -43,7 +43,11 @@ import jakarta.servlet.http.HttpServletResponse; * @see #buildFeedMetadata * @see #buildFeedEntries * @see Atom Syndication Format + * @deprecated since 7.0. Libraries or applications can provide their own {@code View} + * class or perform rendering in web handlers directly. */ +@Deprecated(since = "7.0", forRemoval = true) +@SuppressWarnings("removal") public abstract class AbstractAtomFeedView extends AbstractFeedView { /** diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractFeedView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractFeedView.java index abd279f7dbb..ad016d2dfec 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractFeedView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractFeedView.java @@ -46,7 +46,10 @@ import org.springframework.web.servlet.view.AbstractView; * @param the {@link WireFeed} type * @see AbstractRssFeedView * @see AbstractAtomFeedView + * @deprecated since 7.0. Libraries or applications can provide their own {@code View} + * class or perform rendering in web handlers directly. */ +@Deprecated(since = "7.0", forRemoval = true) public abstract class AbstractFeedView extends AbstractView { @Override diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractRssFeedView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractRssFeedView.java index b00a4034f85..59b14b64839 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractRssFeedView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractRssFeedView.java @@ -44,7 +44,11 @@ import org.springframework.http.MediaType; * @since 3.0 * @see #buildFeedMetadata * @see #buildFeedItems + * @deprecated since 7.0. Libraries or applications can provide their own {@code View} + * class or perform rendering in web handlers directly. */ +@Deprecated(since = "7.0", forRemoval = true) +@SuppressWarnings("removal") public abstract class AbstractRssFeedView extends AbstractFeedView { public AbstractRssFeedView() { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/document/XlsViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/document/XlsViewTests.java index 37bac0a3e77..88439e716e4 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/document/XlsViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/document/XlsViewTests.java @@ -42,6 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Juergen Hoeller * @since 4.2 */ +@SuppressWarnings("removal") class XlsViewTests { private final MockHttpServletRequest request = new MockHttpServletRequest(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/AtomFeedViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/AtomFeedViewTests.java index ac88d2b3b5f..21a53bbc2cb 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/AtomFeedViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/AtomFeedViewTests.java @@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Arjen Poutsma */ +@SuppressWarnings("removal") class AtomFeedViewTests { private final AbstractAtomFeedView view = new MyAtomFeedView(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/RssFeedViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/RssFeedViewTests.java index 650e789de34..9f00e4ac54e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/RssFeedViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/RssFeedViewTests.java @@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Arjen Poutsma */ +@SuppressWarnings("removal") class RssFeedViewTests { private final AbstractRssFeedView view = new MyRssFeedView();