110 lines
3.0 KiB
Plaintext
110 lines
3.0 KiB
Plaintext
[[mvc-view-feeds]]
|
|
= RSS and Atom
|
|
|
|
Both `AbstractAtomFeedView` and `AbstractRssFeedView` inherit from the
|
|
`AbstractFeedView` base class and are used to provide Atom and RSS Feed views, respectively. They
|
|
are based on https://rometools.github.io/rome/[ROME] project and are located in the
|
|
package `org.springframework.web.servlet.view.feed`.
|
|
|
|
`AbstractAtomFeedView` requires you to implement the `buildFeedEntries()` method and
|
|
optionally override the `buildFeedMetadata()` method (the default implementation is
|
|
empty). The following example shows how to do so:
|
|
|
|
[tabs]
|
|
======
|
|
Java::
|
|
+
|
|
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
|
|
----
|
|
public class SampleContentAtomView extends AbstractAtomFeedView {
|
|
|
|
@Override
|
|
protected void buildFeedMetadata(Map<String, Object> model,
|
|
Feed feed, HttpServletRequest request) {
|
|
// implementation omitted
|
|
}
|
|
|
|
@Override
|
|
protected List<Entry> buildFeedEntries(Map<String, Object> model,
|
|
HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
// implementation omitted
|
|
}
|
|
}
|
|
----
|
|
|
|
Kotlin::
|
|
+
|
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
|
|
----
|
|
class SampleContentAtomView : AbstractAtomFeedView() {
|
|
|
|
override fun buildFeedMetadata(model: Map<String, Any>,
|
|
feed: Feed, request: HttpServletRequest) {
|
|
// implementation omitted
|
|
}
|
|
|
|
override fun buildFeedEntries(model: Map<String, Any>,
|
|
request: HttpServletRequest, response: HttpServletResponse): List<Entry> {
|
|
// implementation omitted
|
|
}
|
|
}
|
|
----
|
|
======
|
|
|
|
Similar requirements apply for implementing `AbstractRssFeedView`, as the following example shows:
|
|
|
|
[tabs]
|
|
======
|
|
Java::
|
|
+
|
|
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
|
|
----
|
|
public class SampleContentRssView extends AbstractRssFeedView {
|
|
|
|
@Override
|
|
protected void buildFeedMetadata(Map<String, Object> model,
|
|
Channel feed, HttpServletRequest request) {
|
|
// implementation omitted
|
|
}
|
|
|
|
@Override
|
|
protected List<Item> buildFeedItems(Map<String, Object> model,
|
|
HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
// implementation omitted
|
|
}
|
|
}
|
|
----
|
|
|
|
Kotlin::
|
|
+
|
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
|
|
----
|
|
class SampleContentRssView : AbstractRssFeedView() {
|
|
|
|
override fun buildFeedMetadata(model: Map<String, Any>,
|
|
feed: Channel, request: HttpServletRequest) {
|
|
// implementation omitted
|
|
}
|
|
|
|
override fun buildFeedItems(model: Map<String, Any>,
|
|
request: HttpServletRequest, response: HttpServletResponse): List<Item> {
|
|
// implementation omitted
|
|
}
|
|
}
|
|
----
|
|
======
|
|
|
|
|
|
|
|
The `buildFeedItems()` and `buildFeedEntries()` methods pass in the HTTP request, in case
|
|
you need to access the Locale. The HTTP response is passed in only for the setting of
|
|
cookies or other HTTP headers. The feed is automatically written to the response
|
|
object after the method returns.
|
|
|
|
For an example of creating an Atom view, see Alef Arendsen's Spring Team Blog
|
|
https://spring.io/blog/2009/03/16/adding-an-atom-view-to-an-application-using-spring-s-rest-support[entry].
|
|
|
|
|
|
|
|
|