Vous êtes sur la page 1sur 5

Etude de cas : Service Rest avec JAX-RS

Vous êtes chargé de créer un système de gestion de vols pour une compagnie
aérienne. Ce système devra fournir des services web RESTful pour effectuer des
opérations CRUD (Create, Read, Update, Delete) sur les données des vols.

La classe d'entité Vol représente un vol dans le système de gestion. Elle doit
contenir les champs suivants :
● id : Identifiant unique du vol (de type Long).
● numeroVol : Numéro du vol (de type String).
● depart : Lieu de départ du vol (de type String).
● destination : Lieu de destination du vol (de type String).
● heureDepart : Heure de départ du vol (de type LocalDateTime ou String).
● heureArrivee : Heure d'arrivée du vol (de type LocalDateTime ou String).
● prix : Prix du vol (de type double).

Utilisez l'interface VolRepository fournie, qui contient les méthodes d'accès aux
données des vols, pour implémenter un système de gestion des vols.
public interface VolRepository {
Vol save(Vol vol);
Vol findById(Long id);
List<Vol> findAll();
void deleteById(Long id);
boolean existsById(Long id);
// Méthodes personnalisées si nécessaire
}

Spécifications du Service VolService :

Méthode getAllVols()
● Entrée : Aucune.
● Sortie : Liste de tous les vols disponibles.
● Scénarios d'Exception : Aucun scénario d'exception défini spécifiquement
pour cette méthode.

Méthode getVolById(Long id)


● Entrée : ID du vol à récupérer.
● Sortie : Le vol correspondant à l'ID spécifié.
● Scénarios d'Exception :
● Si aucun vol n'est trouvé pour l'ID spécifié, retourne une réponse avec le
code 404 (Not Found).

Méthode addVol(Vol vol)


● Entrée : Détails du vol à ajouter.
● Sortie : Le vol ajouté avec succès.
● Scénarios d'Exception :
● Si les données du vol ne sont pas valides (date de départ >= date
d'arrivée), retourne une réponse avec le code 400 (Bad Request).

Méthode updateVol(Long id, Vol updatedVol)


● Entrée : ID du vol à mettre à jour, détails mis à jour du vol.
● Sortie : Le vol mis à jour avec succès.
● Scénarios d'Exception :
● Si aucun vol n'est trouvé pour l'ID spécifié, retourne une réponse avec le
code 404 (Not Found).
● Si les données du vol mis à jour ne sont pas valides (date de départ >=
date d'arrivée), retourne une réponse avec le code 400 (Bad Request).

Méthode deleteVol(Long id)


● Entrée : ID du vol à supprimer.
● Sortie : Confirmation de la suppression du vol.
● Scénarios d'Exception :
● Si aucun vol n'est trouvé pour l'ID spécifié, retourne une réponse avec le
code 404 (Not Found).

Annexe sur la classe Response de JAX-RS :

Pour chaque code de réponse HTTP, vous pouvez utiliser l'objet Response de JAX-RS
pour construire une réponse correspondante avec le code de statut approprié. Voici
comment vous pourriez le faire pour différents codes de réponse :

● Réponse "OK" (200) :

Response.ok().entity("Contenu de la réponse").build();

● Réponse "Not Found" (404) :

Response.status(Response.Status.NOT_FOUND).entity("Ressource non
trouvée").build();

● Réponse "Bad Request" (400) :

Response.status(Response.Status.BAD_REQUEST).entity("Requête
incorrecte").build();

● Réponse "Internal Server Error" (500) :

Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Err
eur interne du serveur").build();

● Réponse "Created" (201) :

Response.status(Response.Status.CREATED).entity("Ressource créée
avec succès").build();

Correction :

@Path("/vols")
public class VolService {

private final VolRepository volRepository;

@Autowired
public VolService(VolRepository volRepository) {
this.volRepository = volRepository;
}

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAllVols() {
List<Vol> vols = volRepository.findAll();
return Response.ok(vols).build();
}
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response getVolById(@PathParam("id") Long id) {
Vol vol = volRepository.findById(id);
if (vol == null) {
return
Response.status(Response.Status.NOT_FOUND).entity("Vol non
trouvé").build();
}
return Response.ok(vol).build();
}

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response addVol(Vol vol) {
if (!isValid(vol)) {
return
Response.status(Response.Status.BAD_REQUEST).entity("Date de départ doit
être antérieure à la date d'arrivée").build();
}
Vol savedVol = volRepository.save(vol);
return
Response.status(Response.Status.CREATED).entity(savedVol).build();
}

@PUT
@Path("/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response updateVol(@PathParam("id") Long id, Vol updatedVol)
{
Vol existingVol = volRepository.findById(id);
if (existingVol == null) {
return
Response.status(Response.Status.NOT_FOUND).entity("Vol non
trouvé").build();
}

updatedVol.setId(id);
if (!isValid(updatedVol)) {
return
Response.status(Response.Status.BAD_REQUEST).entity("Date de départ doit
être antérieure à la date d'arrivée").build();
}
Vol savedVol = volRepository.save(updatedVol);
return Response.ok(savedVol).build();
}

@DELETE
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response deleteVol(@PathParam("id") Long id) {
Vol existingVol = volRepository.findById(id);
if (existingVol == null) {
return
Response.status(Response.Status.NOT_FOUND).entity("Vol non
trouvé").build();
}

volRepository.deleteById(id);
return Response.ok("Vol supprimé avec succès").build();
}

private boolean isValid(Vol vol) {


return vol.getHeureDepart().isBefore(vol.getHeureArrivee());
}
}

Vous aimerez peut-être aussi