{"id":95713,"date":"2020-10-05T11:00:00","date_gmt":"2020-10-05T08:00:00","guid":{"rendered":"https:\/\/examples.javacodegeeks.com\/?p=95713"},"modified":"2020-09-29T16:36:43","modified_gmt":"2020-09-29T13:36:43","slug":"spring-boot-server-sent-events-tutorial-using-webflux","status":"publish","type":"post","link":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/","title":{"rendered":"Spring Boot Server-Sent Events Tutorial Using WebFlux"},"content":{"rendered":"<p>Welcome, in this tutorial, we will explain the server-sent events in a spring boot application using WebFlux. In this approach, we will use the Reactive SSE where the service returns a <code>Flux<\/code> of transactions.<\/p>\n<h2>1. Introduction<\/h2>\n<p>Before going further in this Spring Boot Server-Sent Events Tutorial using WebFlux, we will look at the common terminology such as introduction to Spring Boot, Lombok, and Server-Sent Events (SSE).<\/p>\n<h3>1.1 Spring Boot<\/h3>\n<ul>\n<li><em>Spring boot<\/em> is a module that provides rapid application development feature to the spring framework including <strong>auto-configuration<\/strong>, <strong>standalone-code<\/strong>, and <strong>production-ready<\/strong> code<\/li>\n<li>It creates applications that are packaged as <em>jar<\/em> and are directly started using embedded servlet container (such as Tomcat, Jetty or, Undertow). Thus, no need to deploy the <em>war<\/em> files<\/li>\n<li>It simplifies the maven configuration by providing the starter template and helps to resolve the dependency conflicts. It automatically identifies the required dependencies and imports them in the application<\/li>\n<li>It helps in removing the boilerplate code, extra annotations, and XML configurations<\/li>\n<li>It provides a powerful batch processing and manages the rest endpoints<\/li>\n<li>It provides an efficient <em>JPA-starter library<\/em> to effectively connect the application with the relational databases<\/li>\n<li>It offers a Microservice architecture and cloud configuration that manages all the application related configuration properties in a centralized manner<\/li>\n<\/ul>\n<h3>1.2 Lombok<\/h3>\n<ul>\n<li><em>Lombok<\/em> is nothing but a small library which reduces the amount of boilerplate Java code from the project<\/li>\n<li>Automatically generates the getters and setters for the object by using the Lombok annotations<\/li>\n<li>Hooks in via the Annotation processor API<\/li>\n<li>Raw source code is passed to Lombok for code generation before the Java Compiler continues. Thus, produces properly compiled Java code in conjunction with the Java Compiler<\/li>\n<li>Under the <code>target\/classes<\/code> folder you can view the compiled class files<\/li>\n<li>Can be used with Maven, Gradle IDE, etc.<\/li>\n<\/ul>\n<h4>1.2.1 Lombok features<\/h4>\n<table>\n<thead>\n<tr>\n<th><strong>Feature<\/strong><\/th>\n<th><strong>Details<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>val<\/code><\/td>\n<td>Local variables are declared as <code>final<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>var<\/code><\/td>\n<td>Mutable local variables<\/td>\n<\/tr>\n<tr>\n<td><code>@Slf4J<\/code><\/td>\n<td>Creates an SLF4J logger<\/td>\n<\/tr>\n<tr>\n<td><code>@Cleanup<\/code><\/td>\n<td>Will call <code>close()<\/code> on the resource in the <code>finally<\/code> block<\/td>\n<\/tr>\n<tr>\n<td><code>@Getter<\/code><\/td>\n<td>Creates getter methods for all properties<\/td>\n<\/tr>\n<tr>\n<td><code>@Setter<\/code><\/td>\n<td>Creates setter for all non-final properties<\/td>\n<\/tr>\n<tr>\n<td><code>@EqualsAndHashCode<\/code><\/td>\n<td>\n<ul>\n<li>Generates implementations of <code>equals(Object other)<\/code> and <code>hashCode()<\/code><\/li>\n<li>By default will use all non-static, non-transient properties<\/li>\n<li>Can optionally exclude specific properties<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><code>@ToString<\/code><\/td>\n<td>\n<ul>\n<li>Generates String of class name, and each field separated by commas<\/li>\n<li>Optional parameter to include field names<\/li>\n<li>Optional parameter to include a call to the super <code>toString<\/code> method<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><code>@NoArgsConstructor<\/code><\/td>\n<td>\n<ul>\n<li>Generates no-args constructor<\/li>\n<li>Will cause compiler error if there are final fields<\/li>\n<li>Can optionally force, which will initialize final fields with 0\/false\/null var &#8211; mutable local variables<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><code>@RequiredArgsContructor<\/code><\/td>\n<td>\n<ul>\n<li>Generates a constructor for all fields that are <code>final<\/code> or marked <code>@NonNull<\/code><\/li>\n<li>The constructor will throw a <code>NullPointerException<\/code> if any <code>@NonNull<\/code> fields are null val &#8211; local variables are declared <code>final<\/code><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><code>@AllArgsConstructor<\/code><\/td>\n<td>\n<ul>\n<li>Generates a constructor for all properties of the class<\/li>\n<li>Any <code>@NotNull<\/code> properties will have null checks<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><code>@Data<\/code><\/td>\n<td>\n<ul>\n<li>Generates typical boilerplate code for POJOs<\/li>\n<li>Combines &#8211; <code>@Getter<\/code>, <code>@Setter<\/code>, <code>@ToString<\/code>, <code>@EqualsAndHashCode<\/code>, <code>@RequiredArgsConstructor<\/code><\/li>\n<li>No constructor is generated if constructors have been explicitly declared<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><code>@Builder<\/code><\/td>\n<td>\n<ul>\n<li>Implements the <em>Builder<\/em> pattern for object creation<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><code>@Value<\/code><\/td>\n<td>\n<ul>\n<li>The immutable variant of <code>@Data<\/code><\/li>\n<li>All fields are made <code>private<\/code> and <code>final<\/code> by default<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>1.3 Server-Sent Events (SSE)<\/h2>\n<p><em>Server-Sent Events (SSE)<\/em> is a web technology where a browser receives updates from a server via the HTTP connection and offers a better approach then polling as polling causes a lot of HTTP overhead. It is unidirectional (i.e. server to browser) and the events are sent over the traditional HTTP, hence no special implementation is required on the server. It is used to \u2013<\/p>\n<ul>\n<li>Replace long polling<\/li>\n<li>Enable applications that use the server to browser data communication<\/li>\n<\/ul>\n<p><em>Spring Webflux<\/em>\u00a0is an async and non-blocking reactive web stack that enables the handles of a massive number of concurrent connections. It supports reactive streams backpressure and runs on servers such as Netty. Helps to enable vertical scaling of the service to handle a greater load.<\/p>\n<h2>2. Spring Boot Server-Sent Events Tutorial Using WebFlux<\/h2>\n<p>Here is a systematic guide for implementing this tutorial but before going any further I\u2019m assuming that you are aware of the Spring boot.<\/p>\n<h3>2.1 Application Pre-requisite<\/h3>\n<p>To start with this tutorial, we are hoping that you at present have the Lombok plugin installed in the IDE of their favorite choice. If someone needs to go through the Lombok installation on IntelliJ IDE, please watch <a href=\"https:\/\/www.youtube.com\/watch?v=WfyDLiOQmTo\" target=\"_blank\" rel=\"noopener noreferrer\">this<\/a> video. For installation on Eclipse IDE, please watch <a href=\"https:\/\/www.youtube.com\/watch?v=gsFPXkYDb-s\" target=\"_blank\" rel=\"noopener noreferrer\">this<\/a> video.<\/p>\n<h3>2.2 Tools Used and Project Structure<\/h3>\n<p>We are using Eclipse Kepler SR2, JDK 8, and Maven. In case you\u2019re confused about where you should create the corresponding files or folder, let us review the project structure of the spring boot application.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"310\" height=\"519\" src=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-guide-img1.jpg\" alt=\"\" class=\"wp-image-95714\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-guide-img1.jpg 310w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-guide-img1-179x300.jpg 179w\" sizes=\"(max-width: 310px) 100vw, 310px\" \/><figcaption>Fig. 1: Project structure<\/figcaption><\/figure>\n<\/div>\n<p>Let us start building the application!<\/p>\n<h2>3. Creating a Spring Boot application<\/h2>\n<p>Below are the steps involved in developing the application.<\/p>\n<h3>3.1 Maven Dependency<\/h3>\n<p>Here, we specify the dependency for the Spring Boot, WebFlux, Thymeleaf, Faker, and Lombok. Maven will automatically resolve the other dependencies. The <strong>updated<\/strong> file will have the following code.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>pom.xml<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_874956\" class=\"syntaxhighlighter  xml\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<div class=\"line number36 index35 alt1\">36<\/div>\n<div class=\"line number37 index36 alt2\">37<\/div>\n<div class=\"line number38 index37 alt1\">38<\/div>\n<div class=\"line number39 index38 alt2\">39<\/div>\n<div class=\"line number40 index39 alt1\">40<\/div>\n<div class=\"line number41 index40 alt2\">41<\/div>\n<div class=\"line number42 index41 alt1\">42<\/div>\n<div class=\"line number43 index42 alt2\">43<\/div>\n<div class=\"line number44 index43 alt1\">44<\/div>\n<div class=\"line number45 index44 alt2\">45<\/div>\n<div class=\"line number46 index45 alt1\">46<\/div>\n<div class=\"line number47 index46 alt2\">47<\/div>\n<div class=\"line number48 index47 alt1\">48<\/div>\n<div class=\"line number49 index48 alt2\">49<\/div>\n<div class=\"line number50 index49 alt1\">50<\/div>\n<div class=\"line number51 index50 alt2\">51<\/div>\n<div class=\"line number52 index51 alt1\">52<\/div>\n<div class=\"line number53 index52 alt2\">53<\/div>\n<div class=\"line number54 index53 alt1\">54<\/div>\n<div class=\"line number55 index54 alt2\">55<\/div>\n<div class=\"line number56 index55 alt1\">56<\/div>\n<div class=\"line number57 index56 alt2\">57<\/div>\n<div class=\"line number58 index57 alt1\">58<\/div>\n<div class=\"line number59 index58 alt2\">59<\/div>\n<div class=\"line number60 index59 alt1\">60<\/div>\n<div class=\"line number61 index60 alt2\">61<\/div>\n<div class=\"line number62 index61 alt1\">62<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">project<\/code> <code class=\"xml color1\">xmlns:xsi<\/code><code class=\"xml plain\">=<\/code><code class=\"xml string\">\"<a href=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\">http:\/\/www.w3.org\/2001\/XMLSchema-instance<\/a>\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml color1\">xmlns<\/code><code class=\"xml plain\">=<\/code><code class=\"xml string\">\"<a href=\"http:\/\/maven.apache.org\/POM\/4.0.0\">http:\/\/maven.apache.org\/POM\/4.0.0<\/a>\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml color1\">xsi:schemaLocation<\/code><code class=\"xml plain\">=<\/code><code class=\"xml string\">\"<a href=\"http:\/\/maven.apache.org\/POM\/4.0.0\">http:\/\/maven.apache.org\/POM\/4.0.0<\/a> <a href=\"https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd<\/a>\"<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">modelVersion<\/code><code class=\"xml plain\">&gt;4.0.0&lt;\/<\/code><code class=\"xml keyword\">modelVersion<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number5 index4 alt2\">&nbsp;<\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;com.springboot.server-events&lt;\/<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;SpringbootServerEvents&lt;\/<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">version<\/code><code class=\"xml plain\">&gt;0.0.1-SNAPSHOT&lt;\/<\/code><code class=\"xml keyword\">version<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number9 index8 alt2\">&nbsp;<\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">&lt;!-- application name --&gt;<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">name<\/code><code class=\"xml plain\">&gt;Springboot Server Events tutorial&lt;\/<\/code><code class=\"xml keyword\">name<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">description<\/code><code class=\"xml plain\">&gt;A tutorial on springboot and server events&lt;\/<\/code><code class=\"xml keyword\">description<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number13 index12 alt2\">&nbsp;<\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">properties<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">java.version<\/code><code class=\"xml plain\">&gt;1.8&lt;\/<\/code><code class=\"xml keyword\">java.version<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">properties<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number17 index16 alt2\">&nbsp;<\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">&lt;!-- spring boot starter parent dependency --&gt;<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">parent<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;org.springframework.boot&lt;\/<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;spring-boot-starter-parent&lt;\/<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">version<\/code><code class=\"xml plain\">&gt;2.3.4.RELEASE&lt;\/<\/code><code class=\"xml keyword\">version<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">parent<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number24 index23 alt1\">&nbsp;<\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">dependencies<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">&lt;!-- spring boot webflux dependency --&gt;<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">dependency<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;org.springframework.boot&lt;\/<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;spring-boot-starter-webflux&lt;\/<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">dependency<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">&lt;!-- spring boot thymeleaf dependency --&gt;<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">dependency<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;org.springframework.boot&lt;\/<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;spring-boot-starter-thymeleaf&lt;\/<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">dependency<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">&lt;!-- faker dependency --&gt;<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">dependency<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;com.github.javafaker&lt;\/<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;javafaker&lt;\/<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">version<\/code><code class=\"xml plain\">&gt;1.0.2&lt;\/<\/code><code class=\"xml keyword\">version<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">dependency<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">&lt;!-- lombok dependency --&gt;<\/code><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">dependency<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number44 index43 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;org.projectlombok&lt;\/<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number45 index44 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;lombok&lt;\/<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number46 index45 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">scope<\/code><code class=\"xml plain\">&gt;provided&lt;\/<\/code><code class=\"xml keyword\">scope<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number47 index46 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">dependency<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number48 index47 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">dependencies<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number49 index48 alt2\">&nbsp;<\/div>\n<div class=\"line number50 index49 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">build<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number51 index50 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">&lt;!-- final jar name --&gt;<\/code><\/div>\n<div class=\"line number52 index51 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">finalName<\/code><code class=\"xml plain\">&gt;SpringbootServerEvents&lt;\/<\/code><code class=\"xml keyword\">finalName<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number53 index52 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">&lt;!-- to make the application as fat jar so that spring boot libraries are<\/code><\/div>\n<div class=\"line number54 index53 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml comments\">included --&gt;<\/code><\/div>\n<div class=\"line number55 index54 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">plugins<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number56 index55 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">plugin<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number57 index56 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;org.springframework.boot&lt;\/<\/code><code class=\"xml keyword\">groupId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number58 index57 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;spring-boot-maven-plugin&lt;\/<\/code><code class=\"xml keyword\">artifactId<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number59 index58 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">plugin<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number60 index59 alt1\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">plugins<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number61 index60 alt2\"><code class=\"xml spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">build<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number62 index61 alt1\"><code class=\"xml plain\">&lt;\/<\/code><code class=\"xml keyword\">project<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>3.2 Application Properties<\/h3>\n<p>Create a new properties file at the location: <code>SpringbootServerEvents\/src\/main\/resources\/<\/code> and add the following code to it.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>application.properties<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_726241\" class=\"syntaxhighlighter  plain\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"plain plain\">server.port=10093<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"plain plain\">spring.application.name=springboot-and-server-events<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>3.3 Java Classes<\/h3>\n<p>Let us write all the java classes involved in this application.<\/p>\n<h4>3.3.1 Implementation\/Main class<\/h4>\n<p>Add the following code to the main class to bootstrap the application from the main method. Always remember, the entry point of the spring boot application is the class containing <code>@SpringBootApplication<\/code> annotation and the static main method.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><span style=\"text-decoration: underline;\"><em>SpringbootServerEvents.java<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_378928\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">com.springboot.serverevents;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">lombok.extern.slf4j.Slf4j;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.boot.SpringApplication;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.boot.autoconfigure.SpringBootApplication;<\/code><\/div>\n<div class=\"line number6 index5 alt1\">&nbsp;<\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java comments\">\/\/ Lombok annotation<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java comments\">\/\/ Causes Lombok to generate a logger field.<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java color1\">@Slf4j<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java comments\">\/\/ Spring framework annotation<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java comments\">\/\/ Main implementation class which serves two purposes in a spring boot application: Configuration and bootstrapping.<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java color1\">@SpringBootApplication<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">SpringbootServerEvents {<\/code><\/div>\n<div class=\"line number14 index13 alt1\">&nbsp;<\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java comments\">\/\/ Main program to start up the spring boot application.<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">static<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">main(String[] args) {<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">SpringApplication.run(SpringbootServerEvents.<\/code><code class=\"java keyword\">class<\/code><code class=\"java plain\">, args);<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">log.info(<\/code><code class=\"java string\">\"Spring-boot server events application started successfully.\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>3.3.2 Model class<\/h4>\n<p>Add the following code to the Book model class.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>GameOfThrone.java<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_549628\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">com.springboot.serverevents.model;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">lombok.AllArgsConstructor;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">lombok.Builder;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">lombok.Data;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">lombok.NoArgsConstructor;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.stereotype.Component;<\/code><\/div>\n<div class=\"line number8 index7 alt1\">&nbsp;<\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java comments\">\/\/ Lombok annotations<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java comments\">\/\/ Causes lombok to generate toString(), equals(), hashCode(), getter() &amp; setter(), and Required arguments constructor in one go.<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java color1\">@Data<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java comments\">\/\/ Causes Lombok to implement the Builder design pattern for the Pojo class.<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java comments\">\/\/ Usage can be seen in GameOfThroneReactiveRepository.java -&gt; get() method.<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java color1\">@Builder<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java comments\">\/\/ Causes Lombok to generate a constructor with no parameters.<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java color1\">@NoArgsConstructor<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java comments\">\/\/ Causes Lombok to generate a constructor with 1 parameter for each field in your class.<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java color1\">@AllArgsConstructor<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java comments\">\/\/ Spring framework annotation<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java color1\">@Component<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">GameOfThrone {<\/code><\/div>\n<div class=\"line number22 index21 alt1\">&nbsp;<\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">String house;<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">String character;<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">String dragon;<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">String city;<\/code><\/div>\n<div class=\"line number27 index26 alt2\">&nbsp;<\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>3.3.3 Configuration class<\/h4>\n<p>Add the following code to the bean class that will return the bean object for the <code>faker<\/code> object. The usage of this object can be seen in the <code>GameOfThroneReactiveRepository.java<\/code> class.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>BeanConfiguration.java<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_652304\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">com.springboot.serverevents.config;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">com.github.javafaker.Faker;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.context.annotation.Bean;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.context.annotation.Configuration;<\/code><\/div>\n<div class=\"line number6 index5 alt1\">&nbsp;<\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.util.Locale;<\/code><\/div>\n<div class=\"line number8 index7 alt1\">&nbsp;<\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java color1\">@Configuration<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">BeanConfiguration {<\/code><\/div>\n<div class=\"line number11 index10 alt2\">&nbsp;<\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Bean<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">Faker faker() {<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java keyword\">new<\/code> <code class=\"java plain\">Faker(<\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">Locale(<\/code><code class=\"java string\">\"en-US\"<\/code><code class=\"java plain\">));<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>3.3.4 Data-Access-Object class<\/h4>\n<p>Add the following code to the Dao class that returns the <code>Flux<\/code> events. Currently, we are returning the dummy events for the simplest implementation and understanding.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>GameOfThroneReactiveRepository.java<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_824557\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">com.springboot.serverevents.repo;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">com.github.javafaker.Faker;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">com.springboot.serverevents.model.GameOfThrone;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.beans.factory.annotation.Autowired;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.stereotype.Repository;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">reactor.core.publisher.Flux;<\/code><\/div>\n<div class=\"line number8 index7 alt1\">&nbsp;<\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.time.Duration;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.util.Collections;<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.util.List;<\/code><\/div>\n<div class=\"line number12 index11 alt1\">&nbsp;<\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java color1\">@Repository<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">GameOfThroneReactiveRepository {<\/code><\/div>\n<div class=\"line number15 index14 alt2\">&nbsp;<\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Autowired<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">private<\/code> <code class=\"java plain\">Faker faker;<\/code><\/div>\n<div class=\"line number18 index17 alt1\">&nbsp;<\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">Flux&lt;GameOfThrone&gt; findAll() {<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java comments\">\/\/ Simulate the data streaming every 2 seconds.<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">Flux.interval(Duration.ofSeconds(<\/code><code class=\"java value\">2<\/code><code class=\"java plain\">))<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">.onBackpressureDrop()<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">.map(interval -&gt; get())<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">.flatMapIterable(v -&gt; v);<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number26 index25 alt1\">&nbsp;<\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">private<\/code> <code class=\"java plain\">List&lt;GameOfThrone&gt; get() {<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">final<\/code> <code class=\"java plain\">GameOfThrone gameOfThrone = GameOfThrone.builder()<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">.house(faker.gameOfThrones().house())<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">.character(faker.gameOfThrones().character())<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">.dragon(faker.gameOfThrones().dragon())<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">.city(faker.gameOfThrones().city()).build();<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">Collections.singletonList(gameOfThrone);<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>3.3.5 Service class<\/h4>\n<p>Add the following code to the service class where we will call the methods of the Dao class to fetch the data.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>GameOfThroneService.java<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_962164\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">com.springboot.serverevents.service;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">com.springboot.serverevents.model.GameOfThrone;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">com.springboot.serverevents.repo.GameOfThroneReactiveRepository;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">lombok.extern.slf4j.Slf4j;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.beans.factory.annotation.Autowired;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.stereotype.Service;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">reactor.core.publisher.Flux;<\/code><\/div>\n<div class=\"line number9 index8 alt2\">&nbsp;<\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java comments\">\/\/ Lombok annotation<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java comments\">\/\/ Causes Lombok to generate a logger field.<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java color1\">@Slf4j<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java comments\">\/\/ Spring framework annotation<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java color1\">@Service<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">GameOfThroneService {<\/code><\/div>\n<div class=\"line number16 index15 alt1\">&nbsp;<\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Autowired<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">GameOfThroneReactiveRepository gameOfThroneReactiveRepository;<\/code><\/div>\n<div class=\"line number19 index18 alt2\">&nbsp;<\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">Flux&lt;GameOfThrone&gt; getAllThronesFlux() {<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">log.info(<\/code><code class=\"java string\">\"Fetching the game of throne data from the persistent storage and sending back via the flux mechanism.\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">gameOfThroneReactiveRepository.findAll();<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>3.3.6 Index Controller class<\/h4>\n<p>Add the following code to the controller class designed to handle the incoming requests. The class is annotated with the <code>@Controller<\/code> annotation were the <code>HTTP GET<\/code> method would return the <code>index<\/code> page of the application.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>IndexController.java<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_371215\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">com.springboot.serverevents.controller;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">lombok.extern.slf4j.Slf4j;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.stereotype.Controller;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.web.bind.annotation.GetMapping;<\/code><\/div>\n<div class=\"line number6 index5 alt1\">&nbsp;<\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java comments\">\/\/ Lombok annotation<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java comments\">\/\/ Causes Lombok to generate a logger field.<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java color1\">@Slf4j<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java comments\">\/\/ Spring framework annotation<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java color1\">@Controller<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">IndexController {<\/code><\/div>\n<div class=\"line number13 index12 alt2\">&nbsp;<\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">private<\/code> <code class=\"java keyword\">static<\/code> <code class=\"java keyword\">final<\/code> <code class=\"java plain\">String INDEX_PAGE = <\/code><code class=\"java string\">\"index\"<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number15 index14 alt2\">&nbsp;<\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java comments\">\/\/ URL - <a href=\"http:\/\/localhost:10093\/\">http:\/\/localhost:10093\/<\/a><\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@GetMapping<\/code><code class=\"java plain\">(value = <\/code><code class=\"java string\">\"\/\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">String index() {<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">log.info(<\/code><code class=\"java string\">\"Returning the application's welcome page to the user.\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">INDEX_PAGE;<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>3.3.7 Rest Controller class<\/h4>\n<p>Add the following code to the controller class designed to handle the incoming requests. The class is annotated with the <code>@RestController<\/code> annotation were the <code>HTTP GET<\/code> method would return the <code>flux<\/code> events.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>GameOfThroneRestController.java<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_522378\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">com.springboot.serverevents.controller;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">com.springboot.serverevents.model.GameOfThrone;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">com.springboot.serverevents.service.GameOfThroneService;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">lombok.extern.slf4j.Slf4j;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.beans.factory.annotation.Autowired;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.http.MediaType;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.web.bind.annotation.GetMapping;<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.web.bind.annotation.RequestMapping;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.springframework.web.bind.annotation.RestController;<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">reactor.core.publisher.Flux;<\/code><\/div>\n<div class=\"line number12 index11 alt1\">&nbsp;<\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java comments\">\/\/ Lombok annotation<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java comments\">\/\/ Causes Lombok to generate a logger field.<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java color1\">@Slf4j<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java comments\">\/\/ Spring framework annotation<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java color1\">@RestController<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java color1\">@RequestMapping<\/code><code class=\"java plain\">(value = <\/code><code class=\"java string\">\"\/api\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">GameOfThroneRestController {<\/code><\/div>\n<div class=\"line number20 index19 alt1\">&nbsp;<\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Autowired<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">GameOfThroneService gameOfThroneService;<\/code><\/div>\n<div class=\"line number23 index22 alt2\">&nbsp;<\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java comments\">\/\/ URL - <a href=\"http:\/\/localhost:10093\/api\/gameOfThroneStream\">http:\/\/localhost:10093\/api\/gameOfThroneStream<\/a><\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@GetMapping<\/code><code class=\"java plain\">(path = <\/code><code class=\"java string\">\"\/gameOfThroneStream\"<\/code><code class=\"java plain\">, produces = MediaType.TEXT_EVENT_STREAM_VALUE)<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">Flux&lt;GameOfThrone&gt; gameOfThroneStream() {<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">log.info(<\/code><code class=\"java string\">\"Returning the game of throne streaming events via flux mechanism.\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">gameOfThroneService.getAllThronesFlux();<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>4. Thymeleaf Changes<\/h2>\n<p>We will create a simple HTML page that will display the <em>reactive events<\/em> on the browser. Create a new HTML file at the location: <code>SpringbootServerEvents\/src\/main\/resources\/templates\/<\/code> and add the following code to it.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>index.html<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_643819\" class=\"syntaxhighlighter  html\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<div class=\"line number36 index35 alt1\">36<\/div>\n<div class=\"line number37 index36 alt2\">37<\/div>\n<div class=\"line number38 index37 alt1\">38<\/div>\n<div class=\"line number39 index38 alt2\">39<\/div>\n<div class=\"line number40 index39 alt1\">40<\/div>\n<div class=\"line number41 index40 alt2\">41<\/div>\n<div class=\"line number42 index41 alt1\">42<\/div>\n<div class=\"line number43 index42 alt2\">43<\/div>\n<div class=\"line number44 index43 alt1\">44<\/div>\n<div class=\"line number45 index44 alt2\">45<\/div>\n<div class=\"line number46 index45 alt1\">46<\/div>\n<div class=\"line number47 index46 alt2\">47<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"html plain\">&lt;!<\/code><code class=\"html keyword\">DOCTYPE<\/code> <code class=\"html plain\">html&gt;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">html<\/code> <code class=\"html color1\">lang<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"en\"<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">head<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">meta<\/code> <code class=\"html color1\">charset<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"UTF-8\"<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">title<\/code><code class=\"html plain\">&gt;Index&lt;\/<\/code><code class=\"html keyword\">title<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">link<\/code> <code class=\"html color1\">href<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"<a href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.min.css\">https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.min.css<\/a>\"<\/code> <code class=\"html color1\">rel<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"stylesheet\"<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">style<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">.bold-font {<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">font-weight: bold;<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">}<\/code><\/div>\n<div class=\"line number12 index11 alt1\">&nbsp;<\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">th, td {<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">text-align: center;<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">}<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">style<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">head<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number18 index17 alt1\">&nbsp;<\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">body<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number20 index19 alt1\">&nbsp;<\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">div<\/code> <code class=\"html color1\">class<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"container\"<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">h2<\/code> <code class=\"html color1\">class<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"text-muted\"<\/code><code class=\"html plain\">&gt;Spring Boot and Server Events Tutorial Using Webflux&lt;\/<\/code><code class=\"html keyword\">h2<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">table<\/code> <code class=\"html color1\">class<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"table table-striped\"<\/code> <code class=\"html color1\">id<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"gameOfThrones\"<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">thead<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">tr<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">th<\/code> <code class=\"html color1\">class<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"bold-font\"<\/code><code class=\"html plain\">&gt;House&lt;\/<\/code><code class=\"html keyword\">th<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">th<\/code> <code class=\"html color1\">class<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"bold-font\"<\/code><code class=\"html plain\">&gt;Character&lt;\/<\/code><code class=\"html keyword\">th<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">th<\/code> <code class=\"html color1\">class<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"bold-font\"<\/code><code class=\"html plain\">&gt;Dragon&lt;\/<\/code><code class=\"html keyword\">th<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">th<\/code> <code class=\"html color1\">class<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"bold-font\"<\/code><code class=\"html plain\">&gt;City&lt;\/<\/code><code class=\"html keyword\">th<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">tr<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">thead<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">tbody<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">tr<\/code> <code class=\"html color1\">data-th-each<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"gameOfThrone : ${gameOfThrones}\"<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">td<\/code><code class=\"html plain\">&gt;[[${gameOfThrone.house}]]&lt;\/<\/code><code class=\"html keyword\">td<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">td<\/code><code class=\"html plain\">&gt;[[${gameOfThrone.character}]]&lt;\/<\/code><code class=\"html keyword\">td<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">td<\/code><code class=\"html plain\">&gt;[[${gameOfThrone.dragon}]]&lt;\/<\/code><code class=\"html keyword\">td<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">td<\/code><code class=\"html plain\">&gt;[[${gameOfThrone.city}]]&lt;\/<\/code><code class=\"html keyword\">td<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">tr<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">tbody<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"html spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">table<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">div<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number42 index41 alt1\">&nbsp;<\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"html plain\">&lt;<\/code><code class=\"html keyword\">script<\/code> <code class=\"html color1\">data-th-src<\/code><code class=\"html plain\">=<\/code><code class=\"html string\">\"@{\/js\/main.js}\"<\/code><code class=\"html plain\">&gt;&lt;\/<\/code><code class=\"html keyword\">script<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number44 index43 alt1\">&nbsp;<\/div>\n<div class=\"line number45 index44 alt2\"><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">body<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<div class=\"line number46 index45 alt1\">&nbsp;<\/div>\n<div class=\"line number47 index46 alt2\"><code class=\"html plain\">&lt;\/<\/code><code class=\"html keyword\">html<\/code><code class=\"html plain\">&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>5. JavaScript Changes<\/h2>\n<p>To listen to the message <code>events<\/code> we will use the JavaScript <code>EventSource<\/code> object and update the streaming data into the HTML table. Create a new JS file at the location: <code>SpringbootServerEvents\/src\/main\/resources\/static\/js\/<\/code> and add the following code to it.<\/p>\n<p><span style=\"text-decoration: underline;\"><em>main.js<\/em><\/span><\/p>\n<div>\n<div id=\"highlighter_335705\" class=\"syntaxhighlighter  js\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<div class=\"line number36 index35 alt1\">36<\/div>\n<div class=\"line number37 index36 alt2\">37<\/div>\n<div class=\"line number38 index37 alt1\">38<\/div>\n<div class=\"line number39 index38 alt2\">39<\/div>\n<div class=\"line number40 index39 alt1\">40<\/div>\n<div class=\"line number41 index40 alt2\">41<\/div>\n<div class=\"line number42 index41 alt1\">42<\/div>\n<div class=\"line number43 index42 alt2\">43<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"js keyword\">function<\/code> <code class=\"js plain\">LoadGameOfThronesData() {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">this<\/code><code class=\"js plain\">.source = <\/code><code class=\"js keyword\">null<\/code><code class=\"js plain\">;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">this<\/code><code class=\"js plain\">.start = <\/code><code class=\"js keyword\">function<\/code> <code class=\"js plain\">() {<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">let<\/code> <code class=\"js plain\">gameOfThronesTable = document.getElementById(<\/code><code class=\"js string\">\"gameOfThrones\"<\/code><code class=\"js plain\">);<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">this<\/code><code class=\"js plain\">.source = <\/code><code class=\"js keyword\">new<\/code> <code class=\"js plain\">EventSource(<\/code><code class=\"js string\">\"\/api\/gameOfThroneStream\"<\/code><code class=\"js plain\">);<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">this<\/code><code class=\"js plain\">.source.addEventListener(<\/code><code class=\"js string\">\"message\"<\/code><code class=\"js plain\">, <\/code><code class=\"js keyword\">function<\/code> <code class=\"js plain\">(event) {<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js comments\">\/\/ These events are JSON, so parsing.<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">let<\/code> <code class=\"js plain\">gameOfThrone = JSON.parse(event.data);<\/code><\/div>\n<div class=\"line number9 index8 alt2\">&nbsp;<\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">let<\/code> <code class=\"js plain\">rowElement = gameOfThronesTable.getElementsByTagName(<\/code><code class=\"js string\">\"tbody\"<\/code><code class=\"js plain\">)[0].insertRow(0);<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">let<\/code> <code class=\"js plain\">cell0 = rowElement.insertCell(0);<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">let<\/code> <code class=\"js plain\">cell1 = rowElement.insertCell(1);<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">let<\/code> <code class=\"js plain\">cell2 = rowElement.insertCell(2);<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">let<\/code> <code class=\"js plain\">cell3 = rowElement.insertCell(3);<\/code><\/div>\n<div class=\"line number15 index14 alt2\">&nbsp;<\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">cell0.innerHTML = gameOfThrone.house;<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">cell1.innerHTML = gameOfThrone.character;<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">cell2.innerHTML = gameOfThrone.dragon;<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">cell3.innerHTML = gameOfThrone.city;<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">});<\/code><\/div>\n<div class=\"line number21 index20 alt2\">&nbsp;<\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">this<\/code><code class=\"js plain\">.source.onerror = <\/code><code class=\"js keyword\">function<\/code> <code class=\"js plain\">() {<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">this<\/code><code class=\"js plain\">.close();<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">};<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">};<\/code><\/div>\n<div class=\"line number26 index25 alt1\">&nbsp;<\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">this<\/code><code class=\"js plain\">.stop = <\/code><code class=\"js keyword\">function<\/code> <code class=\"js plain\">() {<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js keyword\">this<\/code><code class=\"js plain\">.source.close();<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">};<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number31 index30 alt2\">&nbsp;<\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"js plain\">gameOfThrones = <\/code><code class=\"js keyword\">new<\/code> <code class=\"js plain\">LoadGameOfThronesData();<\/code><\/div>\n<div class=\"line number33 index32 alt2\">&nbsp;<\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"js comments\">\/*<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"js spaces\">&nbsp;<\/code><code class=\"js comments\">* Register callbacks for starting and stopping the SSE controller.<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"js spaces\">&nbsp;<\/code><code class=\"js comments\">*\/<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"js plain\">window.onload = <\/code><code class=\"js keyword\">function<\/code> <code class=\"js plain\">() {<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">gameOfThrones.start();<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"js plain\">};<\/code><\/div>\n<div class=\"line number40 index39 alt1\">&nbsp;<\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"js plain\">window.onbeforeunload = <\/code><code class=\"js keyword\">function<\/code> <code class=\"js plain\">() {<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"js spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"js plain\">gameOfThrones.stop();<\/code><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"js plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>6. Run the Application<\/h2>\n<p>To execute the application, right-click on the <code>SpringbootServerEvents.java<\/code> class, <code>Run As -&gt; Java Application<\/code>.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"718\" height=\"612\" src=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-run-img1.jpg\" alt=\"server-sent events webflux - Run the Application\" class=\"wp-image-95715\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-run-img1.jpg 718w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-run-img1-300x256.jpg 300w\" sizes=\"(max-width: 718px) 100vw, 718px\" \/><figcaption>Fig. 2: Run the Application<\/figcaption><\/figure>\n<\/div>\n<h2>7. Project Demo<\/h2>\n<p>Open the browser of your choice and hit the following URL. The stream of data having the game of throne characters data will be displayed every 2 seconds.<\/p>\n<div>\n<div id=\"highlighter_514139\" class=\"syntaxhighlighter  plain\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"plain plain\"><a href=\"http:\/\/localhost:10093\/\">http:\/\/localhost:10093\/<\/a><\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"818\" height=\"278\" src=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-demo-img1.jpg\" alt=\"server-sent events webflux - Index page\" class=\"wp-image-95716\" srcset=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-demo-img1.jpg 818w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-demo-img1-300x102.jpg 300w, https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/springboot-serverevents-project-demo-img1-768x261.jpg 768w\" sizes=\"(max-width: 818px) 100vw, 818px\" \/><figcaption>Fig. 3: Index page<\/figcaption><\/figure>\n<\/div>\n<p>That is all for this tutorial and I hope the article served you whatever you were looking for. Happy Learning and do not forget to share!<\/p>\n<h2>8. Server-Sent Events using Webflux &#8211; Summary<\/h2>\n<p>In this Spring Boot Server-Sent Events tutorial using WebFlux, you learned:<\/p>\n<ul>\n<li>Spring Boot, Lombok and it features, and SSE (Server-Sent Events)<\/li>\n<li>Flux implementation in Spring Boot and displaying the streaming data on the browser<\/li>\n<\/ul>\n<p>You can download the sample application as an Eclipse project in the <a href=\"#projectDownload\">Downloads<\/a> section.<\/p>\n<h2><a name=\"projectDownload\"><\/a>9. Download the Eclipse Project<\/h2>\n<p>This was an example of Server-Sent Events (SSE) in Spring Boot using WebFlux.<\/p>\n<div class=\"download\"><strong>Download<\/strong><br \/>You can download the full source code of this example here: <a href=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/SpringbootServerEvents.zip\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Spring Boot Server-Sent Events Tutorial Using WebFlux<\/strong><\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Welcome, in this tutorial, we will explain the server-sent events in a spring boot application using WebFlux. In this approach, we will use the Reactive SSE where the service returns a Flux of transactions. 1. Introduction Before going further in this Spring Boot Server-Sent Events Tutorial using WebFlux, we will look at the common terminology &hellip;<\/p>\n","protected":false},"author":119,"featured_media":1248,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1390],"tags":[1466,1022,527,1054,1386,46665],"class_list":["post-95713","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-boot","tag-events","tag-html","tag-javascript","tag-spring","tag-spring-boot","tag-webflux"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Boot Server-Sent Events WebFlux - Examples Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Welcome, in this tutorial, we will explain the server-sent events in a spring boot application using WebFlux. In this approach, we will use the Reactive\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot Server-Sent Events WebFlux - Examples Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Welcome, in this tutorial, we will explain the server-sent events in a spring boot application using WebFlux. In this approach, we will use the Reactive\" \/>\n<meta property=\"og:url\" content=\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/\" \/>\n<meta property=\"og:site_name\" content=\"Examples Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-05T08:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Yatin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yatin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/\"},\"author\":{\"name\":\"Yatin\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/9874407a37b028e8be3276e2b5960d13\"},\"headline\":\"Spring Boot Server-Sent Events Tutorial Using WebFlux\",\"datePublished\":\"2020-10-05T08:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/\"},\"wordCount\":1315,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg\",\"keywords\":[\"Events\",\"html\",\"JavaScript\",\"spring\",\"spring boot\",\"WebFlux\"],\"articleSection\":[\"Boot\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/\",\"name\":\"Spring Boot Server-Sent Events WebFlux - Examples Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg\",\"datePublished\":\"2020-10-05T08:00:00+00:00\",\"description\":\"Welcome, in this tutorial, we will explain the server-sent events in a spring boot application using WebFlux. In this approach, we will use the Reactive\",\"breadcrumb\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#primaryimage\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/examples.javacodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Development\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/java-development\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"spring\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/spring\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Boot\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/spring\/boot\/\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"Spring Boot Server-Sent Events Tutorial Using WebFlux\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#website\",\"url\":\"https:\/\/examples.javacodegeeks.com\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Examples and Code Snippets\",\"publisher\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/examples.javacodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/examples.javacodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/javacodegeeks\",\"https:\/\/x.com\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/9874407a37b028e8be3276e2b5960d13\",\"name\":\"Yatin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2023\/09\/cropped-Yatin-Batra_avatar_1515758148-96x96.jpg\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2023\/09\/cropped-Yatin-Batra_avatar_1515758148-96x96.jpg\",\"caption\":\"Yatin\"},\"description\":\"An experience full-stack engineer well versed with Core Java, Spring\/Springboot, MVC, Security, AOP, Frontend (Angular &amp; React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).\",\"sameAs\":[\"https:\/\/www.javacodegeeks.com\"],\"url\":\"https:\/\/examples.javacodegeeks.com\/author\/yatin-batra\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Boot Server-Sent Events WebFlux - Examples Java Code Geeks","description":"Welcome, in this tutorial, we will explain the server-sent events in a spring boot application using WebFlux. In this approach, we will use the Reactive","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/","og_locale":"en_US","og_type":"article","og_title":"Spring Boot Server-Sent Events WebFlux - Examples Java Code Geeks","og_description":"Welcome, in this tutorial, we will explain the server-sent events in a spring boot application using WebFlux. In this approach, we will use the Reactive","og_url":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/","og_site_name":"Examples Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2020-10-05T08:00:00+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg","type":"image\/jpeg"}],"author":"Yatin","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Yatin","Est. reading time":"20 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#article","isPartOf":{"@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/"},"author":{"name":"Yatin","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/9874407a37b028e8be3276e2b5960d13"},"headline":"Spring Boot Server-Sent Events Tutorial Using WebFlux","datePublished":"2020-10-05T08:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/"},"wordCount":1315,"commentCount":0,"publisher":{"@id":"https:\/\/examples.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#primaryimage"},"thumbnailUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg","keywords":["Events","html","JavaScript","spring","spring boot","WebFlux"],"articleSection":["Boot"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/","url":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/","name":"Spring Boot Server-Sent Events WebFlux - Examples Java Code Geeks","isPartOf":{"@id":"https:\/\/examples.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#primaryimage"},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#primaryimage"},"thumbnailUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg","datePublished":"2020-10-05T08:00:00+00:00","description":"Welcome, in this tutorial, we will explain the server-sent events in a spring boot application using WebFlux. In this approach, we will use the Reactive","breadcrumb":{"@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#primaryimage","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2012\/12\/spring-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/examples.javacodegeeks.com\/spring-boot-server-sent-events-tutorial-using-webflux\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/examples.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java Development","item":"https:\/\/examples.javacodegeeks.com\/category\/java-development\/"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/"},{"@type":"ListItem","position":4,"name":"spring","item":"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/spring\/"},{"@type":"ListItem","position":5,"name":"Boot","item":"https:\/\/examples.javacodegeeks.com\/category\/java-development\/enterprise-java\/spring\/boot\/"},{"@type":"ListItem","position":6,"name":"Spring Boot Server-Sent Events Tutorial Using WebFlux"}]},{"@type":"WebSite","@id":"https:\/\/examples.javacodegeeks.com\/#website","url":"https:\/\/examples.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Examples and Code Snippets","publisher":{"@id":"https:\/\/examples.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/examples.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/examples.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/examples.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/9874407a37b028e8be3276e2b5960d13","name":"Yatin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2023\/09\/cropped-Yatin-Batra_avatar_1515758148-96x96.jpg","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2023\/09\/cropped-Yatin-Batra_avatar_1515758148-96x96.jpg","caption":"Yatin"},"description":"An experience full-stack engineer well versed with Core Java, Spring\/Springboot, MVC, Security, AOP, Frontend (Angular &amp; React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).","sameAs":["https:\/\/www.javacodegeeks.com"],"url":"https:\/\/examples.javacodegeeks.com\/author\/yatin-batra\/"}]}},"_links":{"self":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/95713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/users\/119"}],"replies":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=95713"}],"version-history":[{"count":0,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/95713\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/media\/1248"}],"wp:attachment":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=95713"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=95713"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=95713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}