Spring MVC – Phần 15: RSS là gì? Tạo RSS Feed với Spring MVC

Spring MVC – Phần 15: RSS là gì? Tạo RSS Feed với Spring MVC

1. RSS là gì?

RSS (Rich Site Summary hoặc Really Simple Syndication) là một loại ngôn ngữ được xây dựng dựa trên XML với mục đích phân phối thông tin (feed) tới người đọc một cách nhanh chóng và đơn giản.

RSS được dùng để tóm tăt, cập nhất các thông tin từ bài viết, và chúng cần có một phần mềm hoặc trình hỗ trợ để chuyển đổi dữ liệu XML thành thông tin cho người đọc.

RSS cũng là một loại XML service.

Ví dụ:

Spring MVC – Phần 15: RSS là gì? Tạo RSS Feed với Spring MVC

2. Spring MVC Generate RSS Feed

Spring MVC – Phần 15: RSS là gì? Tạo RSS Feed với Spring MVC

Thư viện sử dụng:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>stackjava.com</groupId>
  <artifactId>SpringMVC-RSS</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.rometools</groupId>
      <artifactId>rome</artifactId>
      <version>1.9.0</version>
    </dependency>
  </dependencies>
</project>

Thư viên rom thực hiện chuyển dữ liệu sang dạng RSS

File Model:

package stackjava.com.springmvc.model;

import java.util.Date;

public class RSSMessage {
  private String title;
  private String url;
  private String summary;
  private Date createdDate;

  //getter - setter

}

Ở đây mình để nội dung của mỗi tin RSS sẽ gồm các thông tin như title, url, summary, create date

package stackjava.com.springmvc.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.rometools.rome.feed.rss.Channel;
import com.rometools.rome.feed.rss.Content;
import com.rometools.rome.feed.rss.Item;

import stackjava.com.springmvc.model.RSSMessage;

public class RSSFeedViewer extends AbstractRssFeedView {

  public static String FEED_CONTENT = "feedContent";
  @Override
  protected void buildFeedMetadata(Map<String, Object> model, Channel feed, HttpServletRequest request) {

    feed.setTitle("Java tutorial");
    feed.setDescription("Leaning Java by Example");
    feed.setLink("http://www.stackjava.com");

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

  @Override
  protected List<Item> buildFeedItems(Map<String, Object> model, HttpServletRequest request,
      HttpServletResponse response) throws Exception {

    @SuppressWarnings("unchecked")
    List<RSSMessage> listContent = (List<RSSMessage>) model.get(FEED_CONTENT);
    List<Item> items = new ArrayList<Item>(listContent.size());

    for (RSSMessage 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;
  }
}

RSSFeedViewer thừa kế từ AbstractRssFeedView và thực hiện cài đặt việc xây dựng tin RSS

File Controller:

package stackjava.com.springmvc.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.servlet.ModelAndView;

import stackjava.com.springmvc.model.RSSMessage;
import stackjava.com.springmvc.rss.RSSFeedViewer;

@Controller
public class RSSController {

  @RequestMapping("/")
  public ModelAndView getFeedInRss() {

    List<RSSMessage> items = new ArrayList<RSSMessage>();

    RSSMessage content = new RSSMessage();
    content.setTitle("Spring");
    content.setUrl("https://stackjava.com/category/spring");
    content.setSummary("Spring tutorial");
    content.setCreatedDate(new Date());
    items.add(content);

    RSSMessage content2 = new RSSMessage();
    content2.setTitle("Hibernate");
    content2.setUrl("https://stackjava.com/category/hibernate");
    content2.setSummary("Hibernate tutorial");
    content2.setCreatedDate(new Date());
    items.add(content2);

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

    return mav;
  }
}

File Spring Config:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

  <context:component-scan base-package="stackjava.com.springmvc" />
  
  <!-- Map returned view name "rssViewer" to bean id "rssViewer" -->
  <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />

  <bean id="rssViewer" class="stackjava.com.springmvc.rss.RSSFeedViewer" />

</beans>

Ở controller ta trả về view có name là “rssViewer”, view đó sẽ được map với bean “rssViewer” để trả về RSS Feed.

 

Demo:

spring mvc generate rss feed

Okay, Done!

Download code ví dụ trên tại đây

 

References:

http://www.whatisrss.com/

https://en.wikipedia.org/wiki/RSS

Spring MVC – Phần 15: RSS là gì? Tạo RSS Feed với Spring MVC

stackjava.com