«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.