Skip to main content
 首页 » 编程设计

Spring mvc展示RSS Feed

2022年07月19日119pander-it

Spring mvc展示RSS Feed

本文介绍如何使用Spring mvc及AbstractRssFeedView 类构建简单Rss Feed。同时实现简单REST API发布feed。

1. RSS Feed

Feed:

信源,理解成信息的源泉,英文是feed。信息发布网站将网站全部或者部分信息整合到一个 RSS 文件中,这个文件就被称之为 feed 。信源中包含的数据都是标准的 XML 格式,不但能直接被其他站点调用,也能在其他的终端和服务中使用.

RSS:

一般提供信源地址(RSS 输出)的网站都有这样的标识,点击这些标识,你就可以发现对应的信源地址(RSS 输出地址一个RSS文件就是一段规范的XML数据,该文件一般以rss,xml或者rdf作为后缀。

发布一个RSS文件(一般称为RSS Feed)后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,如PDA、手机、邮件列表等。而且一个网站联盟(比如专门讨论旅游的网站系列)也能通过互相调用彼此的RSS Feed,自动的显示网站联盟中其他站点上的最新信息,这就叫着RSS的联合。这种联合就导致一个站点的内容更新越及时、RSS Feed被调用的越多,该站点的知名度就会越高,从而形成一种良性循环。

2. 引用依赖

spring是基于Rome框架实现Rss功能,因此需引入rome依赖:

<dependency> 
    <groupId>com.rometools</groupId> 
    <artifactId>rome</artifactId> 
    <version>1.10.0</version> 
</dependency> 

3. Feed 实现

接下来构建实际feed,需要继承AbstractRssFeedView 类并实现其两个方法。第一个接收Channel对象作为输入并填充feed的元数据。另一个返回表示feed内容项列表,实际应用中可以返回当前站点中的最新信息。

@Component 
public class RssFeedView extends AbstractRssFeedView { 
  
    @Override 
    protected void buildFeedMetadata(Map<String, Object> model,  
      Channel feed, HttpServletRequest request) { 
        feed.setTitle("Baeldung RSS Feed"); 
        feed.setDescription("Learn how to program in Java"); 
        feed.setLink("http://www.baeldung.com"); 
    } 
  
    @Override 
    protected List<Item> buildFeedItems(Map<String, Object> model,  
      HttpServletRequest request, HttpServletResponse response) { 
        Item entryOne = new Item(); 
        entryOne.setTitle("JUnit 5 @Test Annotation"); 
        entryOne.setAuthor("donatohan.rimenti@gmail.com"); 
        entryOne.setLink("http://www.baeldung.com/junit-5-test-annotation"); 
        entryOne.setPubDate(Date.from(Instant.parse("2017-12-19T00:00:00Z"))); 
        return Arrays.asList(entryOne); 
    } 
} 

4. 发布Feed

最后,使用简单的REST服务发布Feed,服务返回一个视图对象:

@RestController 
public class RssFeedController { 
  
    @Autowired 
    private RssFeedView view; 
      
    @GetMapping("/rss") 
    public View getFeed() { 
        return view; 
    } 
} 

因为基于Spring Boot实现,需要实现启动类:

@SpringBootApplication 
public class RssFeedApplication { 
    public static void main(final String[] args) { 
        SpringApplication.run(RssFeedApplication.class, args); 
    } 
} 

运行应用,执行服务请求,返回RSS Feed如下:

<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"> 
    <channel> 
        <title>Baeldung RSS Feed</title> 
        <link>http://www.baeldung.com</link> 
        <description>Learn how to program in Java</description> 
        <item> 
            <title>JUnit 5 @Test Annotation</title> 
            <link>http://www.baeldung.com/junit-5-test-annotation</link> 
            <pubDate>Tue, 19 Dec 2017 00:00:00 GMT</pubDate> 
            <author>donatohan.rimenti@gmail.com</author> 
        </item> 
    </channel> 
</rss> 

5. 总结

本文使用Spring 和 Rome实现简单Rss feed,使得订阅者可以通过网络服务消费Feed。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/100057552