Creación de endpoint PUT para actualizar películas en base de datos
Clase 17 de 23 • Curso de Java Spring Boot
Resumen
Actualizar información en una base de datos es esencial para gestionar aplicaciones modernas de manera segura. En este resumen aprenderás cómo implementar de forma controlada y eficiente un endpoint PUT para modificar solo campos permitidos de una película, usando buenas prácticas y herramientas propias del desarrollo backend.
¿Cómo controlar qué campos pueden modificarse con un endpoint PUT?
Permitir la edición parcial evita errores y mantiene la integridad de los datos. Se recomienda crear un UpdateMovieDTO exclusivo para las actualizaciones, que incluya únicamente los campos editables como título, fecha de lanzamiento y calificación (rating).
- El ID y otros valores sensibles como género o duración quedan excluidos del UpdateMovieDTO.
- Usar DTOs separados promueve la seguridad y claridad en la lógica de actualización.
- Copiar la estructura de MovieDTO y modificar los campos según lo necesario facilita la implementación.
¿Cómo diseñar el controlador para recibir las actualizaciones?
La anotación @PutMapping se utiliza para recibir el ID de la película como parte de la URL, y el cuerpo del request incluye el UpdateMovieDTO.
- El ID se captura con la anotación @PathVariable.
- El método controlador recibe ambos valores para identificar correctamente el registro y su información a modificar.
- Esta separación asegura que la actualización se realice sobre la entidad correcta y con datos controlados.
¿Cómo validar la existencia y actualizar los datos en la base de datos?
Es fundamental comprobar que el registro existe antes de intentar cualquier cambio.
- Utiliza el repositorio para buscar la entidad por ID con findById.
- Si no existe, retorna null: así evitas intentos de modificar datos inexistentes.
- Si existe, solo se asignan los nuevos valores permitidos con los métodos set correspondientes (título, release date y rating).
- Se recomienda realizar conversiones de tipos, por ejemplo, de double a BigDecimal usando BigDecimal.valueOf si es necesario.
¿Cómo automatizar la asignación de valores con Mapstruct y MappingTarget?
Para simplificar y hacer más seguro el mapeo entre el DTO y la entidad, Mapstruct permite crear un método especial:
- Define un método en el MovieMapper llamado updateEntityFromDTO que recibe el UpdateMovieDTO y la entidad a modificar.
- Agrega la anotación @MappingTarget al segundo parámetro para aplicar los cambios por referencia.
- Usa la notación @Mapping para señalar qué campos mapea cada vez (target y source).
- Este método no retorna valor (void), ya que modifica directamente la instancia recibida.
¿Cómo integrar el flujo en el servicio y controlador?
El método update en el servicio centraliza la lógica:
- Recibe el ID y UpdateMovieDTO.
- Llama al repositorio para validar la existencia y actualizar solo los campos permitidos.
- El controlador responde con ResponseEntity.ok llamando al servicio de actualización.
- Las pruebas se pueden realizar con Postman enviando una petición PUT a la URL correspondiente, verificando la actualización correcta solo de los campos seleccionados.
¿Qué retos adicionales pueden implementarse para gestionar recursos?
Como ejercicio recomendable, se propone crear un servicio que permita eliminar películas utilizando la anotación @DeleteMapping y el ID del recurso. Esto completa el ciclo de gestión CRUD y fortalece la API.
Si tienes una solución diferente o quieres compartir resultados, la sección de comentarios está abierta para tus aportaciones y preguntas.