complete existing methods and implement printMovie method in MovieServices class

This commit is contained in:
2026-04-27 19:45:33 +03:30
parent d6b1ea2542
commit 1539145374
+47 -72
View File
@@ -87,26 +87,25 @@ public class MovieService {
}
}
/**
* TODO 1: Display movies for a specific genre and page
*
* Open this link in your browser (and check Pretty-print checkbox) to view json format:
* https://api.meshcomp.ir/api/v1/genres/1/movies
*
* Steps:
* - Call getMoviesByGenreList(genreId, page) to get JSON
* - Parse JSON to JsonObject
* - Get "movies" array (NOT "data")
* - Loop through array and print: "ID: {id} | {title} ({year})"
* - Also print total and total_pages
*
* PUT ALL PARSING CODE INSIDE try-catch
*/
public void displayMoviesByGenre(Long genreId, Long page) {
// TODO: Write your code here
// All parsing code must be inside try-catch
String jsonResponse = getMoviesByGenreList(genreId, page);
try {
// Your code here
if (jsonResponse == null) {
System.out.println("Failed to get movies");
return;
}
JsonObject rootObject = JsonParser.parseString(jsonResponse).getAsJsonObject();
JsonArray moviesArray = rootObject.getAsJsonArray("movies");
Gson gson = new Gson();
List<Movie> movies = gson.fromJson(moviesArray, new TypeToken<ArrayList<Movie>>() {});
for (Movie movie : movies) {
System.out.println("ID: " + movie.getId() + " | " + movie.getTitle() + "(" + movie.getYear() + ")");
}
int total = rootObject.get("total").getAsInt();
int totalPages = rootObject.get("total_pages").getAsInt();
System.out.println("Total movies: " +total);
System.out.println("Total pages: " +totalPages);
} catch (Exception e) {
System.err.println("ERROR: " + e.getMessage());
@@ -114,79 +113,55 @@ public class MovieService {
}
/**
* BONUS: Fetch movie details from API using movie ID
* URL format: https://api.meshcomp.ir/api/v1/movies/{movieId}
*/
private String getMovieById(Long movieId) {
try {
// TODO: Complete this method
// String url = MOVIE_BY_ID_URL + movieId;
// HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();
// HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// if (response.statusCode() == 200) return response.body();
String url = MOVIE_BY_ID_URL + movieId;
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
return response.body();
}
else {
System.out.println("HTTP error code: " + response.statusCode());
return null;
}
return null;
} catch (Exception e) {
System.out.println("!!Exception : " + e.getMessage());
}
return null;
}
/*
BONUS TODO: Display complete movie details for a given movie ID
Open this link in your browser (and check Pretty-print checkbox) to view json format:
https://api.meshcomp.ir/api/v1/movies/1
INSTRUCTIONS:
1. Call getMovieById(movieId) to get the JSON response string
2. Check if response is null (if yes, print error and return)
3. Parse the JSON string to JsonObject (inside try-catch)
4. Use Gson to extract all fields from the JSON and map them to your Movie class:
- Add missing JSON fields to your Movie class first (actors, awards, director,
imdb_id, imdb_votes, metascore, plot, rated, released, runtime, type, writer)
- Then use Gson to parse your json string
5. Print all movie details in a readable format
(PUT ALL PARSING CODE INSIDE THE EXISTING try-catch)
*/
/* EXAMPLE OUTPUT:
=======================================================================
THE SHAWSHANK REDEMPTION (1994)
=======================================================================
Rating: 9.3/10 | Votes: 1,738,596
Director: Frank Darabont
Cast: Tim Robbins, Morgan Freeman, Bob Gunton, William Sadler
Genre: Crime, Drama
Runtime: 142 min | Rated: R
Country: USA | Released: 14 Oct 1994
Plot: Two imprisoned men bond over a number of years, finding
solace and eventual redemption through acts of common decency.
Awards: Nominated for 7 Oscars. Another 19 wins & 30 nominations.
=======================================================================
*/
public void displayMovieDetails(Long movieId) {
// Step 1: Get JSON response from API
String jsonResponse = getMovieById(movieId);
// Step 2: Check if we got valid data
// Step 3-5: Parse JSON and display details (PUT YOUR CODE INSIDE try-catch)
String jsonResponse = getMovieById(movieId);
if (jsonResponse == null) {
System.out.println("Failed to get movie details for ID: " + movieId);
return;
}
try {
// TODO: Parse jsonResponse to JsonObject
// HINT: Use JsonParser.parseString(jsonResponse).getAsJsonObject()
// TODO: use Gson to parse the json
// Your code here:
JsonObject rootObject = JsonParser.parseString(jsonResponse).getAsJsonObject();
Gson gson = new Gson();
Movie movie = gson.fromJson(rootObject, Movie.class);
printMovie(movie);
} catch (Exception e) {
System.err.println("ERROR parsing movie details: " + e.getMessage());
}
}
private void printMovie(Movie movie) {
System.out.println("=".repeat(70));
System.out.println(" ".repeat(20) + movie.getTitle() + " (" + movie.getYear() + ")");
System.out.println("=".repeat(70));
System.out.println("Rating: " + movie.getImdb_rating() + "/10" + " | " + "Votes: " + movie.getImdb_votes());
System.out.println("Director: " + movie.getDirector());
System.out.println("Cast: " + movie.getActors());
System.out.println("Genre: " + movie.getGenres());
System.out.println("Runtime: " + movie.getRuntime() + " | " + "Rated: " + movie.getRated());
System.out.println("Country: " + movie.getCountry() + " | " + "Released: " + movie.getReleased());
System.out.println("Plot: " + movie.getPlot());
System.out.println("Awards: " + movie.getAwards());
System.out.println("=".repeat(70));
}
}