spring使用rssfeed
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import mypackage.rss.view.RssFeedView;/** * 栏目稿件RSS订阅请求控制器类。 * */@Controller@RequestMapping({ "/rss/c/{columnId}"})public class ColumnStoriesRssController { @RequestMapping("") public ModelAndView feed() { ModelAndView modelAndView = new ModelAndView(); // TODO 从本地缓存获取稿件数据 modelAndView.addObject(RssFeedView.ITEMS_KEY, null); modelAndView.setView(new RssFeedView()); return modelAndView; }}
RSS Feed 视图类
import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.jdom2.Element;import org.springframework.web.servlet.view.feed.AbstractRssFeedView;import mypackage.domain.model.NrCompoStory;import mypackage.domain.model.NrGalleryStory;import mypackage.domain.model.NrStory;import mypackage.domain.model.NrVideoStory;import mypackage.framework.infras.exception.UnexpectedException;import com.rometools.rome.feed.rss.Channel;import com.rometools.rome.feed.rss.Item;/** * RSS Feed 视图类。 * */public class RssFeedView extends AbstractRssFeedView { /** * RSS稿件列表KEY */ public static final String ITEMS_KEY = "RSS_ITEMS"; /** * { @inheritDoc} */ @Override protected Channel newFeed() { Channel channel = new Channel("rss_2.0"); channel.setTitle("${title}"); channel.setLink("${link}"); channel.setEncoding("UTF-8"); channel.setDescription("${description}"); return channel; } /** * { @inheritDoc} */ @Override protected List- buildFeedItems(Map
model, HttpServletRequest request, HttpServletResponse response) throws Exception { @SuppressWarnings("unchecked") List stories = (List )model.get(ITEMS_KEY); List - result = new ArrayList
- (); if (stories != null) { for (NrStory story : stories) { result.add(createItem(story)); } } return result; } /** * 通过稿件创建RSS Item * * @param story 稿件 * @return RSS Item */ private Item createItem(NrStory story) { Item result = null; if (story instanceof NrCompoStory) { result = createCompoItem((NrCompoStory)story); } else if (story instanceof NrGalleryStory) { result = createGalleryItem((NrGalleryStory)story); } else if (story instanceof NrVideoStory) { result = createVideoItem((NrVideoStory)story); } else { throw new UnexpectedException("unknow story type.(" + story.getClass().getName() + ")"); } return result; } /** * 通过图文稿件创建RSS Item * * @param story 稿件 * @return RSS Item */ private Item createCompoItem(NrCompoStory story) { Item result = new Item(); result.setTitle(""); result.setLink(""); result.setDescription(null); result.setPubDate(null); Element element = null;//
// result.setForeignMarkup(Arrays.asList(element)); return result; } /** * 通过图集稿件创建RSS Item * * @param story 稿件 * @return RSS Item */ private Item createGalleryItem(NrGalleryStory story) { return null; } /** * 通过视频稿件创建RSS Item * * @param story 稿件 * @return RSS Item */ private Item createVideoItem(NrVideoStory story) { return null; }}// (see detail in next page)// // …...//