RSS Feeds with Spring Boot

We added a RSS Subscription to NixMash Spring Posts in like 10 minutes. Okay, probably longer than that but it was really quick.

Here’s our feed XML, the Real Deal in RSS feeds. See it live here.

The FeedView

Creating RSS Feeds in Spring is all about its AbstractFeedView classes. There’s an AbstractAtomFeedView, AbstractRssFeedView and other supporting classes.

In (1) you’ll see we’re extending Spring’s AbstractRssFeedView class. Also notice on the first line we’re explicitly naming the Component. This is important as we’ll be passing it by name to the Controller. Next we create our Channel Header and populate it with ApplicationSettings from an external properties file (2). We retrieve our Post List, stream it, modify it with our createItem(post) method and return our list of Feed Items (3). Slick!

Spring uses the Rome Subscription Tools v1.5 or higher, so we need to add the RomeTools dependency in build.gradle.

compile 'com.rometools:rome:1.6.1'

The Controller

Now that we’ve created our Spring RssPostView all we have to do is add it to our model. Notice we’re adding the Bean name, and Spring takes over in parsing and populating the feed from the Component. That’s pretty cool.

Configuring the FeedView Resolver

You may see other posts that mention the need to configure the RssFeed View Resolver, since we’re configuring a view resolver. Something like…

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.enableContentNegotiation(new RssPostFeedView());
}

…in a WebMvcConfigurer class. This is no longer needed, which is very wonderful.

The Test

Here’s a quick test to confirm we’re delivering media with content type application/rss-xml.

In Summary

To sum up, to create an RSS or Atom feed with Spring you

  1. Create a FeedView component that extends a Spring Abstract FeedView superclass
  2. Pass that component by name from your Controller method model to the client

Source Code Notes for this Post

All source code discussed in this post can be found in my NixMash Spring GitHub repo and viewed online here.