Spring 3 MVCとRSSフィードの例

Spring 3 MVCおよびRSSフィードの例

Spring 3には、java.netのROMEパッケージを使用してRSSフィードビューを生成するための抽象クラス「AbstractRssFeedView」が付属しています。 このチュートリアルでは、Spring MVCフレームワークからRSSフィードビューを生成する方法を示します。

使用される技術:

  1. Spring 3.0.5.RELEASE

  2. ROME 1.0.0

  3. JDK 1.6

  4. Eclipse 3.6

  5. メーベン3

チュートリアルの最後に、このURL –http://localhost:8080/SpringMVC/rest/rssfeedにアクセスすると、ブラウザーは次のRSSフィードコンテンツを返します。


  
    Mkyong Dot Com
    http://www.example.com
    Java Tutorials and Examples
    
      Spring MVC Tutorial 1
      http://www.example.com/spring-mvc/tutorial-1
      Tutorial 1 summary ...
      Tue, 26 Jul 2011 02:26:08 GMT
    
    
      Spring MVC Tutorial 2
      http://www.example.com/spring-mvc/tutorial-2
      Tutorial 2 summary ...
      Tue, 26 Jul 2011 02:26:08 GMT
    
  

1. ディレクトリ構造

最終的なプロジェクト構造を確認します。

directory structure

2. プロジェクトの依存関係

Mavenの場合、pom.xmlで次の依存関係を宣言します。

    
        3.0.5.RELEASE
    

    

        
        
            org.springframework
            spring-core
            ${spring.version}
        

        
            org.springframework
            spring-web
            ${spring.version}
        

        
            org.springframework
            spring-webmvc
            ${spring.version}
        

        
        
            net.java.dev.rome
            rome
            1.0.0
        

        
        
            javax.servlet
            servlet-api
            2.5
            provided
        

    

3. モデル

単純なPOJO。後でこのオブジェクトを使用してRSSフィードコンテンツを生成します。

package com.example.common.model;

import java.util.Date;

public class SampleContent {

    String title;
    String url;
    String summary;
    Date createdDate;

    //getter and seeter methods
}

4. AbstractRssFeedView

AbstractRssFeedViewを拡張するクラスを作成し、buildFeedMetadataメソッドとbuildFeedItemsメソッドをオーバーライドします。以下のコードは自明です。

package com.example.common.rss;

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.example.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 model, Channel feed,
        HttpServletRequest request) {

        feed.setTitle("Mkyong Dot Com");
        feed.setDescription("Java Tutorials and Examples");
        feed.setLink("http://www.example.com");

        super.buildFeedMetadata(model, feed, request);
    }


    @Override
    protected List buildFeedItems(Map model,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

        @SuppressWarnings("unchecked")
        List listContent = (List) model.get("feedContent");
        List items = new ArrayList(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;
    }

}

5. コントローラ

Spring MVCコントローラークラス、rssフィードコンテンツを生成し、ビュー名「rssViewer」を返します(このビュー名は「CustomRssViewer」の上に属し、後の手順6で登録されます)。

package com.example.common.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.example.common.model.SampleContent;

@Controller
public class RssController {

    @RequestMapping(value="/rssfeed", method = RequestMethod.GET)
    public ModelAndView getFeedInRss() {

        List items = new ArrayList();

        SampleContent content  = new SampleContent();
        content.setTitle("Spring MVC Tutorial 1");
        content.setUrl("http://www.example.com/spring-mvc/tutorial-1");
        content.setSummary("Tutorial 1 summary ...");
        content.setCreatedDate(new Date());
        items.add(content);

        SampleContent content2  = new SampleContent();
        content2.setTitle("Spring MVC Tutorial 2");
        content2.setUrl("http://www.example.com/spring-mvc/tutorial-2");
        content2.setSummary("Tutorial 2 summary ...");
        content2.setCreatedDate(new Date());
        items.add(content2);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("rssViewer");
        mav.addObject("feedContent", items);

        return mav;

    }

}

6. Spring Beanの登録

Spring Bean定義ファイルで、自動コンポーネントスキャンを有効にし、「CustomRssViewer」クラスと「BeanNameViewResolver」ビューリゾルバーを登録して、ビュー名「rssViewer」が返されるようにします。 Springは、Bean ID「rssViewer」にマップする必要があることを知っています。

ファイル:mvc-dispatcher-servlet.xml



    

    
    

    

Note
web.xmlのファイルコンテンツは省略されています。標準構成のみです。興味がある場合は、記事の最後にあるこのプロジェクト全体をダウンロードしてください。

7. Demo

spring mvc and rss feed demo

How about Atom?
Atomの場合、AbstractRssFeedViewではなくAbstractAtomFeedViewを拡張する必要があります。

ソースコードをダウンロード

ダウンロード–SpringMVC-RSS-Feed-Example.zip(9 KB)