Correction Du TD REST
Correction Du TD REST
Correction Du TD REST
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
}
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.
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 :
Response.ok().entity("Contenu de la réponse").build();
Response.status(Response.Status.NOT_FOUND).entity("Ressource non
trouvée").build();
Response.status(Response.Status.BAD_REQUEST).entity("Requête
incorrecte").build();
Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Err
eur interne du serveur").build();
Response.status(Response.Status.CREATED).entity("Ressource créée
avec succès").build();
Correction :
@Path("/vols")
public class VolService {
@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();
}