es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo enviar ArrayList o Sets como filtro de lista en el cuerpo de la solicitud o en la URL en una solicitud PUT

Estoy tratando de escribir un controlador que funcionará como reserva de múltiples asientos. La lista de Integers se utiliza para filtrar.
Mi Entidad se ve así:

@Entity
@Id
private movieId;
private String movieName;
private String cinemaName;
private String cinemaHall;
private Intger seatingPlace;
private boolean booked;

¿Cómo puedo pasar una lista o conjuntos en el cuerpo de la solicitud para acceder a la actualización múltiple de seatingPlace? ¿Modifiqué la Entidad o la conecté de alguna manera relacionada?

Actualmente mi API multipleUpdate funciona utilizando la consulta de JPA findByMovieNameAndCinemaNameAndcinemaHall y me devuelve una lista que
verifico si no está vacía y compruebo (campo booleano booked) si es verdadero, entonces está bien, puedes reservarlos.
Y después de eso quiero filtrar pasando la lista seatingPlace y cambiar el booleano a false.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para pasar una lista o conjunto en el cuerpo de la solicitud para actualizar los lugares de asientos, puede modificar el método del controlador para aceptar un cuerpo de solicitud de tipo List o Set.

    @RequestMapping(value = "/multiple-seat-reservation", method = RequestMethod.PUT)
    public ResponseEntity<string> multipleSeatReservation(@RequestBody List<integer> seatingPlaces) {
        // lógica para actualizar los lugares de asientos en la base de datos
        // ...
        return ResponseEntity.ok("Los lugares de asientos se actualizaron correctamente");
    }
    

    Para poder actualizar el estado reservado de los lugares de asientos, deberá modificar la clase Entity para agregar un método setter para el campo booked.

    @Entity
    @Id
    private movieId;
    private String movieName;
    private String cinemaName;
    private String cinemaHall;
    private Integer seatingPlace;
    private boolean booked;
    
    public void setBooked(boolean booked) {
        this.booked = booked;
    }
    

    Luego, puede modificar la lógica del controlador para recuperar la lista de asientos basada en el nombre de la película, el nombre del cine y la sala de cine usando una consulta JPA, y actualizar el estado reservado de los asientos utilizando un bucle.

    List<seat> seats = seatRepository.findByMovieNameAndCinemaNameAndCinemaHall(movieName, cinemaName, cinemaHall);
    for (Seat seat : seats) {
        if (seatingPlaces.contains(seat.getSeatingPlace()) && seat.isBooked()) {
            seat.setBooked(false);
            seatRepository.save(seat);
        }
    }
    

    Esto filtrará la lista de asientos según los lugares de asientos proporcionados y actualizará el estado reservado a falso solo para aquellos asientos que ya estén reservados.

Comments are closed.