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 .