Перейти к основному содержимому

Отображение RSS-канала с помощью Spring MVC

· 3 мин. чтения

1. Введение

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

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

2. RSS-канал

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

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

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

Прежде всего, поскольку поддержка RSS в Spring основана на ROME framework , нам нужно добавить его в качестве зависимости к нашему 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("ForEach RSS Feed");
feed.setDescription("Learn how to program in Java");
feed.setLink("http://www.foreach.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.foreach.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>ForEach RSS Feed</title>
<link>http://www.foreach.com</link>
<description>Learn how to program in Java</description>
<item>
<title>JUnit 5 @Test Annotation</title>
<link>http://www.foreach.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>

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

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

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

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