«1. Введение

В этом кратком руководстве показано, как создать простую RSS-ленту с использованием Spring MVC и класса AbstractRssFeedView.

После этого мы также реализуем простой REST API, чтобы предоставлять доступ к нашей ленте по сети.

2. RSS-канал

Прежде чем перейти к деталям реализации, давайте кратко рассмотрим, что такое RSS и как он работает.

RSS — это тип веб-канала, который позволяет пользователю легко отслеживать обновления с веб-сайта. Кроме того, RSS-каналы основаны на XML-файле, который суммирует содержимое сайта. Затем агрегатор новостей может подписаться на один или несколько каналов и отображать обновления, регулярно проверяя, не изменился ли XML.

3. Зависимости

Прежде всего, поскольку поддержка RSS в Spring основана на фреймворке ROME, нам нужно добавить его в качестве зависимости к нашему pom, прежде чем мы сможем его использовать:

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

Путеводитель по Риму можно найти в нашей предыдущей статье.

4. Реализация фида

Далее мы создадим сам фид. Для этого мы расширим класс AbstractRssFeedView и реализуем два его метода.

Первый получит объект Channel в качестве входных данных и заполнит его метаданными канала.

Другой вернет список элементов, представляющих содержимое фида:

@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("[email protected]");
        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);
    }
}

5. Предоставление фида

Наконец, мы собираемся создать простую службу REST, чтобы сделать нашу ленту доступной на веб. Сервис вернет объект представления, который мы только что создали:


@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-канал:

<?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>[email protected]</author>
        </item>
    </channel>
</rss>

6. Заключение

В этой статье рассказывается, как создать простой RSS-канал с помощью Spring и ROME и сделать его доступным для потребителей с помощью веб-службы.

В нашем примере мы использовали Spring Boot для запуска нашего приложения. Для получения более подробной информации по этой теме продолжайте читать эту вводную статью о Spring Boot.

Как всегда, весь используемый код доступен на GitHub.