Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
218 changes: 125 additions & 93 deletions documentation/modules/ROOT/pages/08_rest-client.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -89,52 +89,68 @@ Create a new `Swapi` Java class in `src/main/java` in the `com.redhat.developers
----
package com.redhat.developers;

import java.util.List;
public class Swapi {

import com.fasterxml.jackson.annotation.JsonProperty;
private String title;
private int episode_id;
private String opening_crawl;
private String director;
private String producer;

public class Swapi {

private List<Results> results;

public Swapi(@JsonProperty("results") List<Results> results) {
this.results = results;
public Swapi() {
}

public List<Results> getResults() {
return results;
public Swapi(String title, int episode_id, String opening_crawl, String director, String producer) {
this.title = title;
this.episode_id = episode_id;
this.opening_crawl = opening_crawl;
this.director = director;
this.producer = producer;
}

public static class Results {
private int episodeId;
private String producer;
private String director;
private String opening_crawl;

public Results(int episodeId, String producer, String director, String opening_crawl) {
this.episodeId = episodeId;
this.producer = producer;
this.director = director;
this.opening_crawl = opening_crawl;
}

public int getEpisodeId() {
return episodeId;
}

public String getProducer() {
return producer;
}
public String getTitle() {
return title;
}

public String getDirector() {
return director;
}
public void setTitle(String title) {
this.title = title;
}

public String getOpening_crawl() {
return opening_crawl;
}
public int getEpisode_id() {
return episode_id;
}

public void setEpisode_id(int episode_id) {
this.episode_id = episode_id;
}

public String getOpening_crawl() {
return opening_crawl;
}

public void setOpening_crawl(String opening_crawl) {
this.opening_crawl = opening_crawl;
}

public String getDirector() {
return director;
}

public void setDirector(String director) {
this.director = director;
}

public String getProducer() {
return producer;
}

public void setProducer(String producer) {
this.producer = producer;
}
}

----

=== Create SwapiService
Expand All @@ -148,25 +164,23 @@ Create a new `SwapiService` Java interface in `src/main/java` in the `com.redhat
----
package com.redhat.developers;

import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;

import com.redhat.developers.Swapi.Results;

@Path("/api")
@RegisterRestClient
public interface SwapiService {

@GET
@Path("/films")
@Produces(MediaType.APPLICATION_JSON)
Swapi getMovieByTitle(@QueryParam("search") String title);

@Path("/films/{id}")
public Swapi getFilmById(@PathParam("id") String id);
}

----

== Configure REST Client properties
Expand All @@ -176,7 +190,7 @@ Add the following properties to your `application.properties` in `src/main/resou
[.console-input]
[source,properties]
----
quarkus.rest-client."com.redhat.developers.SwapiService".url=https://swapi.dev
quarkus.rest-client."com.redhat.developers.SwapiService".url=https://swapi.info/api
----

== Create MovieDTO
Expand All @@ -191,65 +205,88 @@ Create a new `MovieDTO` Java class in `src/main/java` in the `com.redhat.develop
package com.redhat.developers;

import java.sql.Date;
import java.util.List;

import com.redhat.developers.Swapi.Results;

public class MovieDTO {

private String title;
private Date releaseDate;
private int episodeId;
private String producer;
private String director;
private int episode_id;
private String opening_crawl;
private String director;
private String producer;

private MovieDTO(String title, Date releaseDate, int episodeId, String producer, String director, String opening_crawl) {
public MovieDTO() {
}

private MovieDTO(String title, Date releaseDate, int episode_id, String opening_crawl, String director, String producer) {
this.title = title;
this.releaseDate = releaseDate;
this.episodeId = episodeId;
this.producer = producer;
this.director = director;
this.episode_id = episode_id;
this.opening_crawl = opening_crawl;
this.director = director;
this.producer = producer;
}

public static MovieDTO of(Movie movie, Swapi swapi){
List<Results> results = swapi.getResults();
Results result = results.get(0);

public static MovieDTO of(Movie movie, Swapi swapi) {
return new MovieDTO(
movie.title,
movie.releaseDate,
result.getEpisodeId(),
result.getProducer(),
result.getDirector(),
result.getOpening_crawl()
movie.title,
movie.releaseDate,
swapi.getEpisode_id(),
swapi.getOpening_crawl(),
swapi.getDirector(),
swapi.getProducer()
);
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public Date getReleaseDate() {
return releaseDate;
}

public int getEpisodeId() {
return episodeId;
public void setReleaseDate(Date releaseDate) {
this.releaseDate = releaseDate;
}

public String getProducer() {
return producer;
public int getEpisode_id() {
return episode_id;
}

public String getDirector() {
return director;
public void setEpisode_id(int episode_id) {
this.episode_id = episode_id;
}

public String getOpening_crawl() {
return opening_crawl;
}

public void setOpening_crawl(String opening_crawl) {
this.opening_crawl = opening_crawl;
}

public String getDirector() {
return director;
}

public void setDirector(String director) {
this.director = director;
}

public String getProducer() {
return producer;
}

public void setProducer(String producer) {
this.producer = producer;
}
}

----

== Change MovieResource to use SwapiService
Expand All @@ -263,41 +300,35 @@ Change the `MovieResource` Java class in `src/main/java` in the `com.redhat.deve
----
package com.redhat.developers;

import java.util.List;
import java.util.stream.Collectors;

import org.eclipse.microprofile.rest.client.inject.RestClient;

import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
import org.eclipse.microprofile.rest.client.inject.RestClient;

@Path("/movie")
import java.util.List;
import java.util.stream.Collectors;

@Path("movie")
@Produces(MediaType.APPLICATION_JSON)
public class MovieResource {

@RestClient
@Inject
SwapiService swapiService;

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<MovieDTO> movies(@QueryParam("year") String year) {
public List<MovieDTO> getMovie(@QueryParam("year") String year) {

if (year != null) {
return Movie.findByYear(Integer.parseInt(year)).stream()
.map(movie -> MovieDTO.of(movie, swapiService.getMovieByTitle(movie.title)))
.collect(Collectors.toList());
return Movie.<Movie>findByYear(Integer.parseInt(year)).stream()
.map(movie -> MovieDTO.of(movie, swapiService.getFilmById(String.valueOf(movie.id))))
.collect(Collectors.toList());
} else{
return Movie.<Movie>listAll().stream()
.map(movie -> MovieDTO.of(movie, swapiService.getFilmById(String.valueOf(movie.id))))
.collect(Collectors.toList());
}
return Movie.<Movie>listAll().stream()
.map(movie -> MovieDTO.of(movie, swapiService.getMovieByTitle(movie.title)))
.collect(Collectors.toList());

}

@Transactional
Expand All @@ -307,9 +338,10 @@ public class MovieResource {
public Response newMovie(Movie movie) {
movie.id = null;
movie.persist();
return Response.status(Status.CREATED).entity(movie).build();
return Response.status(Response.Status.CREATED).entity(movie).build();
}
}

----

== Invoke the endpoint
Expand Down