In Spring 3, comes with a abstract class “AbstractRssFeedView” to generate RSS feed view, using java.net’s ROME package. In this tutorial, we show you how to generate a RSS feed view from Spring MVC framework.
Technologies used :
- Spring 3.0.5.RELEASE
- ROME 1.0.0
- JDK 1.6
- Eclipse 3.6
- Maven 3
At the end of the tutorial, when you visit this URL – http://localhost:8080/SpringMVC/rest/rssfeed, browser will return following RSS feed content :
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
<title>Mkyong Dot Com</title>
<link>http://www.mkyong.com</link>
<description>Java Tutorials and Examples</description>
<item>
<title>Spring MVC Tutorial 1</title>
<link>http://www.mkyong.com/spring-mvc/tutorial-1</link>
<content:encoded>Tutorial 1 summary ...</content:encoded>
<pubDate>Tue, 26 Jul 2011 02:26:08 GMT</pubDate>
</item>
<item>
<title>Spring MVC Tutorial 2</title>
<link>http://www.mkyong.com/spring-mvc/tutorial-2</link>
<content:encoded>Tutorial 2 summary ...</content:encoded>
<pubDate>Tue, 26 Jul 2011 02:26:08 GMT</pubDate>
</item>
</channel>
</rss>
1. Directory Structure
Review the final project structure.

2. Project Dependencies
For Maven, declares following dependencies in your pom.xml.
<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- RSS -->
<dependency>
<groupId>net.java.dev.rome</groupId>
<artifactId>rome</artifactId>
<version>1.0.0</version>
</dependency>
<!-- for compile only, your container should have this -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
3. Model
A simple POJO, later use this object to generate the RSS feed content.
import java.util.Date;
public class SampleContent {
String title;
String url;
String summary;
Date createdDate;
//getter and seeter methods
}
4. AbstractRssFeedView
Create a class extends AbstractRssFeedView, and override the buildFeedMetadata and buildFeedItems methods, below code should be self-explanatory.
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.feed.AbstractRssFeedView;
import com.mkyong.common.model.SampleContent;
import com.sun.syndication.feed.rss.Channel;
import com.sun.syndication.feed.rss.Content;
import com.sun.syndication.feed.rss.Item;
public class CustomRssViewer extends AbstractRssFeedView {
@Override
protected void buildFeedMetadata(Map<String, Object> model, Channel feed,
HttpServletRequest request) {
feed.setTitle("Mkyong Dot Com");
feed.setDescription("Java Tutorials and Examples");
feed.setLink("http://www.mkyong.com");
super.buildFeedMetadata(model, feed, request);
}
@Override
protected List<Item> buildFeedItems(Map<String, Object> model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
@SuppressWarnings("unchecked")
List<SampleContent> listContent = (List<SampleContent>) model.get("feedContent");
List<Item> items = new ArrayList<Item>(listContent.size());
for(SampleContent tempContent : listContent ){
Item item = new Item();
Content content = new Content();
content.setValue(tempContent.getSummary());
item.setContent(content);
item.setTitle(tempContent.getTitle());
item.setLink(tempContent.getUrl());
item.setPubDate(tempContent.getCreatedDate());
items.add(item);
}
return items;
}
}
6. Spring Bean Registration
In a Spring bean definition file, enable the auto component scanning, and register your “CustomRssViewer” class and “BeanNameViewResolver” view resolver, so that when view name “rssViewer” is returned, Spring know it should map to bean id “rssViewer“.
File : mvc-dispatcher-servlet.xml
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.mkyong.common.controller" />
<!-- Map returned view name "rssViewer" to bean id "rssViewer" -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean id="rssViewer" class="com.mkyong.common.rss.CustomRssViewer" />
</beans>
File content of web.xml is omitted, just a standard configuration, if you are interest, download this whole project at the end of the article.
7. Demo
URL : http://localhost:8080/SpringMVC/rest/rssfeed

For Atom, you just need to extends
AbstractAtomFeedView, instead of AbstractRssFeedView.Download Source Code
Download it – SpringMVC-RSS-Feed-Example.zip (9 KB)
浙公网安备 33010602011771号