[[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 package `org.springframework.web.servlet.view.feed`. `AbstractAtomFeedView` requires you to implement the `buildFeedEntries()` method and optionally override the `buildFeedMetadata()` method (the default implementation is empty). The following example shows how to do so: [tabs] ====== Java:: + [source,java,indent=0,subs="verbatim,quotes"] ---- public class SampleContentAtomView extends AbstractAtomFeedView { @Override protected void buildFeedMetadata(Map model, Feed feed, HttpServletRequest request) { // implementation omitted } @Override protected List buildFeedEntries(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { // implementation omitted } } ---- Kotlin:: + [source,kotlin,indent=0,subs="verbatim,quotes"] ---- class SampleContentAtomView : AbstractAtomFeedView() { override fun buildFeedMetadata(model: Map, feed: Feed, request: HttpServletRequest) { // implementation omitted } override fun buildFeedEntries(model: Map, request: HttpServletRequest, response: HttpServletResponse): List { // implementation omitted } } ---- ====== Similar requirements apply for implementing `AbstractRssFeedView`, as the following example shows: [tabs] ====== Java:: + [source,java,indent=0,subs="verbatim,quotes"] ---- public class SampleContentRssView extends AbstractRssFeedView { @Override protected void buildFeedMetadata(Map model, Channel feed, HttpServletRequest request) { // implementation omitted } @Override protected List buildFeedItems(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { // implementation omitted } } ---- Kotlin:: + [source,kotlin,indent=0,subs="verbatim,quotes"] ---- class SampleContentRssView : AbstractRssFeedView() { override fun buildFeedMetadata(model: Map, feed: Channel, request: HttpServletRequest) { // implementation omitted } override fun buildFeedItems(model: Map, request: HttpServletRequest, response: HttpServletResponse): List { // implementation omitted } } ---- ====== The `buildFeedItems()` and `buildFeedEntries()` methods pass in the HTTP request, in case you need to access the Locale. The HTTP response is passed in only for the setting of cookies or other HTTP headers. The feed is automatically written to the response object after the method returns. For an example of creating an Atom view, see Alef Arendsen's Spring Team Blog {spring-site-blog}/2009/03/16/adding-an-atom-view-to-an-application-using-spring-s-rest-support[entry].