Construcción de un API REST usando Spring Boot completa |
Vložit
- čas přidán 28. 02. 2022
- En el 2012, siendo Spring un framework maduro con casi una década de evolución, en la página de Github del proyecto Spring se lanzó un issue bajo el texto: «Improved support for ‘containerless’ web application architectures [SPR-9888]«, con el objetivo de evitar tener que generar WARs de despliegue en servlet containers externos. Pueden encontrarse más detalles de este issue, este es el origen de Spring Boot.
✅ Aprende más en nuestro blog: sacavix.com/
✅ Apoya nuestro trabajo: paypal.me/yoandypv (Te daremos un regalito)
✅ Apóyanos en Patreon: / sacavix_tech
(Con tu apoyo en Patreon accedes a ventajas exclusivas como directos, preguntas y respuestas en el chat, respuestas a tus dudas y acceso a nuestro libro "Patrones para la implementación de una arquitectura basada en microservicios".
Spring Boot, nace en el 2014 como un proyecto de Spring que implementa principalmente los problemas planteados en el issue mencionado.
Desde ese entonces Spring Boot se ha convertido en el marco de trabajo más demandando en el entorno Java por las empresas, cientos de miles de ofertas de trabajo se demandan diariamente.
En este video construimos la aplicación ToDo API, una API REST completa desde cero usando Spring Boot.
Aprenderás:
Spring MVC
Base de datos H2.
Spring Data JPA (Realizar consultas con Spring Data y SQL Nativas)
Manejar errores con el ControllerAdvice de Spring.
Configurar y usar Swagger.
Crear Mappers y el uso de DTOs.
Espero te sea útil y práctico el vídeo y que puedas aprender.
Para aprender más visita nuestra web: sacavix.com
El código está disponible acá: github.com/yoandypv/todo-api (regalame una estrella en github si te parece útil :-)
#springboot #api #microservicios #rest #swagger - Věda a technologie
Q bueno eres explicando y sobre todo cubriendo los casos de usos.
La manera en que te expresas al intentar explicar cada paso que das es increíble man! Te felicito, ya he visto varios videos de éste tipo, pero tu estas en el primer puesto! Saludos desde Argentina!
INDICE:
1. 3:30 - CONFIGURACION DEL SPRING INITIALIZER Y DEPENDENCIAS
2. 10:17 - DEFINICION DE LA ESTRUCTURA DE PAQUETES
3. 13:06 - CONFIGURANDO SWAGGER
4. 15:30 - ESTABLECIENDO ALGUNAS APLICATION PROPERTIES
5. 17:59 - CREANDO EL CONTROLADOR TaskController
6. 20:13 - CREANDO LA ENTITY O MODELO Task
7. 25:58 - CREANDO EL REPOSITORY TaskRepository
8. 28:23 - CREANDO EL SERVICIO TaskService, CON EL METODO createTask
9. 31:10 - CREANDO UN DTO (Data Transfer Object) para la entidad Task
10. 34:40 - CONTINUANDO CON EL SERVICIO TaskService USANDO EL DTO EN EL METODO createTask
11. 36:25 - CREANDO UN MAPPER PARA CONVERTIR UN DTO A UN ENTITY PARA PODERLO USAR EN EL SERVICIO
12. 41:33 - CONTINUANDO CON EL SERVICIO TaskService USANDO EL DTO Y EL MAPPER EN EL METODO createTask
13. 43:05 - CREANDO EL METODO HTTP POST PARA EL METODO createTask EN EL CONTROLADOR
14: 46:16 - PROBANDO EL METODO createTask DESDE SWAGGER
15. 49:15 - AGREGANDO EL METODO findAll AL TaskService
16. 51:22 - AGREGANDO EL METODO HTTP GET PARA EL METODO findAll EN EL CONTROLADOR
17. 52:36 - PROBANDO EL METODO findAll DESDE SWAGGER
18. 53:27 - AGREGANDO EL METODO findAllByTaskStatus AL TaskRepository
19: 55:58 - AGREGANDO EL METODO findAllByTaskStatus AL TaskService
20. 56:55 - AGREGANDO EL METODO HTTP GET PARA EL METODO findAllByTaskStatus EN EL CONTROLADOR
21. 58:58 - PROBANDO EL METODO findAllByTaskStatus DESDE SWAGGER
22. 1:00:2O - AGREGANDO EL METODO markTaskAsFinished AL TaskRepository
23. 01:06:07 - AGREGANDO EL METODO updateTaskAsFinished AL TaskService
24. 01:06:53 - AGREGANDO EL METODO HTTP PATCH PARA EL METODO markAsFinished EN EL CONTROLADOR
25. 1:10:23 - PROBANDO EL METODO markTaskAsFinished DESDE SWAGGER
26. 1:11:24 - AGREGANDO LA ANOTACION @Transactional AL METODO updateTaskAsFinished EN EL TaskService
27. 1:12:40 - CREANDO UNA CLASE PARA LAS EXCEPCIONES
28. 1:16:32 - MEJORANDO EL METODO updateTaskAsFinished EN EL TaskService USANDO LAS EXCEPCIONES
29. 1:18:39 - CREANDO UN EXCEPTION HANDLER PARA QUE LAS EXCEPCIONES NO LLEGUEN DE MANERA DESCONTROLADO
30. 1:21:37 - AGREGANDO EL METODO deleteById AL TaskService
31. 1:22:59 - AGREGANDO EL METODO HTTP DELETE PARA EL METODO deleteById EN EL CONTROLADOR
Explicas de manera muy sencilla y haces parecer que las cosas son fáciles aunque no lo sean. Muchas gracias por compartir tus conocimiento, eso es de grandes!
Muchas gracias por compartir tu conocimiento, muy claro y conciso, espero con ansias la parte 2.
Muchas gracias, muy buen video para los que estamos comenzando con spring boot
Muchas gracias, muy clara y elocuente su explicación.
Que gran contenido, lo he visto ya 2 veces, muy útil y muy bien explicado. Muchas gracias por el contenido!
Oro mappeado a un video jajaaj es tremendo el contenido!
TE AMO CALVITO 💕💕
Estupendo Tutorial Yoandy, saludos y me alegro de verte
excelente, muchas gracias por compartir
Fantástico vídeo curso, muchas gracias por compatir su conocimiento.
Es el primer vídeo tuyo que veo. Excelente forma de explicar y el contenido muy bien estructurado :D Gracias!
Muchas gracias por el contenido! Para practicar el fin de semana. :)
Muchas Gracias excelente video
Buenísimo vídeo. De verdad, enhorabuena.
Excelente video !!!! Muchas gracias al equipo de SACAViX Tech ....
Gracias a ti Daniel, espero te haya sido útil!
Buenisimo, me ha servido mucho como aprendizaje inicial de Spring Boot. Muchas gracias!!
Sos excelente explicando. Gracias!!
Muchas gracias, se nota el deseo de que el proyecto sea entendido, saludos desde Colombia!
muchisimas gracias, se entendio todo a la perfecion !!!!
gracias, la verdad me ayudaste mucho, estoy en un bootcamp para entrar a una empresa y hicieron todo lo que hiciste vos, no me quedaba claro lo de h2 y jpa, pero con esto ya estoy a otro nivel.
Que bien, muchos éxitos
excelente video Dev!, gracias Por toda esta valiosa info.
Es increíble lo fácil que lo haces. Gracias por tu dedicación. Listos, suscrito!
Gracias a ti Iván, me alegra te sea útil, nos vemos en los próximos 👍
Excelente videos!!!! Super entendibles, siempre aprendo algo nuevo con tus videos. Muchas gracias por compartirlo 😉
Gracias. Saludos
gracias por la clase magistral. excelente video. Oro en Puro. gracias x el aporte a la comunidad
Gracias a ti Cristian por el comentario, nos vemos en los próximos 😜
Excelente este video!!! Si bien vengo trabajando con Spring hace un tiempo, mostraste un par de cositas muy interesantes y que me sirvieron muchisimo, como el ExceptionHandler, y como utilizas los servicios.
Impecable, sería impresionante que saques más videos asi, de proyectos para practicar!!
Gracias
Excelente material, tenia muchas dudas que me ayudaste a aclarar. Exitos!!
eres grande man me has enseñado mucho. felicidades
Un mostro, muy buena explicación vamos por otro tutorial💣
Excelente, felicitaciones!!
Genial tu video!!! eres el mejor de youtube explicando los temas de Springboot!
Gracias Javier, pronto se viene curso completo para principiantes, todo explicado desde cero 😍
No suelo comentar videos pero esto sin duda es increible deberias hacer mas videos de este tipo
Excelente material practico, muchas gracias!
Gracias a ti Paulo!
Super entendible, te agradezco por la información, saludos desde Uruguay
Excelente info!
Impecable la explicación, hice todo el proyecto y funcionó perfectamente, por ahí tuve algún tema en swagger que me mostró cada método que fui creando pero no me permitía ejecutarlo desde ahí, lo hice desde postman, pero seguramente es porque en algo le estuve errando, lo voy a revisar nuevamente, sigue generando contenido de este tipo que a los que nos estamos iniciando en spring boot nos aporta muchísimo, es oro en polvo, mil gracias
Uno de los mejores videos que vi hasta el momento, todo lo que hiciste estuvo excelente. Facil de entender y cubriste lo mas importante de una api rest. Realmente te felicito. Me sirvió un monton el video.
Gracias !
Es genial este video!!!!!
saludos muchas gracias exelente tutorial
Gracias por tus vídeos, me son muy útiles. Acabo de comprar tu libro para seguir aprendiendo y poder también apoyar tu trabajo. Saludos desde España!
Gracias Victor !
Excelente video!. Te felicito por hacer hincapie en las buenas practicas como por ejemplo que el controller solo sea un nexo con el service y que no hagas como muchos cursos, de ponerle validaciones y logica en los controllers.
Mi amigo, te felicito, que buena forma de explicar además de buen profesional, tienes excelente forma de enseñar un abrazo desde Medellín Colombia
Hola, muchas gracias por tu comentario
Increíble manera de explicar las cosas, no pare de subir videos que vas para arriba!
Gracias Andrik !
@@SACAViXTech Me encantó tu explicación completa, ahora bien no es compatible con springboot 3 podrías hacer un remake para que este siga funcionando?
Excelente Video. ti forma de explicar cada estructura , se nota que conoces muy bien el tema. continua... exito
Muchas gracias
Excelente contenido, usas una arquitectura mejor estructurada que la que trabajamos en la empresa. Gracias por compartir.
excelente video, queda todo muy claro
Gracias, nos vemos en los próximos 😜
Hermano muchas gracias por compartir todos tus conocimientos!, un saludo desde Bogotá Colombia🇨🇴🤙🏻
Gracias Daniel, saludos a la gente de la tierra del mejor café del mundo :-)
Gracias por compartir, muy claras las explicaciones, estaría interesante hacer unit test a este proyecto con Mockito y JUnit5, Saludos desde Mexico!!
Buen curso, se agradece tu aporte.
Te ganaste un seguidor 😅
Buen video 👍
Que buen video, el del maestro..
Crack, un abrazo
Holaaa, muy buen video, mis felicidades ! Saludos desde Argentina !
Muy buen tutorial! Excelente profesor! Un abrazo desde Argentina.
Abrazos Nahuel, Gracias.
Gracias Teacher iniciando a aprender en el canal.
Bienvenido 👍
Excelente tu contenido, y sobretodo el cómo lo explicas, de lo mejor en CZcams, sería genial un curso más detallado, y profundo de spring boot, con este estilo de crear una app, algo más complejo h robusto que abarque todos los conceptos y buenas prácticas... Gracias por tomarte el tiempo de general tan buen contenido.. éxitos...
Muy bueno pa!
gracias, ahora sí entiendo jaja
Muy bueno, ojala siga con mas nivel para principiantes de cero a avanzado.
Security, test unitarios..
Gracias!
Muy clara la explicación, se que requieren mucho esfuerzo, pero es muy dicactico esta clase de proyectos con buenas practicas.
Gracias por comentar victor !
😅😅😅 gente les juro que no es un falso documental, es 100% real no fake.
Super... de verdad...
Gracias a ti Francisco
Muy buen video! Gracias por las enseñanzas! Sería genial un vídeo de Spring Security con respecto al Login con base de datos, y que se maneje los datos de esa persona logeada.
Haré un video al respecto, ya veo que es un conocimiento demandado :-)
Muchas gracias, la adapte a Spring boot 3 y Swagger 3 jeje
todavía no lo empiezo pero ya me dieron ganas, por que en algunos cursos de spring explican con front, pero lo que mas me interesa por el momento es solo el back.
Genial, si te entran dudas déjame el comment y te respondo 💪
Muy buena la Explicacion, he visto que otros en su DTO igual lo vuelven a declarar el Id de la tabla, pero me esta quedando aclarado que nose debe declarar el Id en el DTO.
Claro, es una muy mala practica exponer las estructuras internas de tu base de datos, mas aun el id hacia afuera el id siempre que no sea necesario, mejor no exponerlo.
Muy buen vudei
clase magistral te lo agradezco, he visto tu canal y tienes muchos videos con diferentes temas, me podrías decir que video ver como continuación a este video o como refuerzo para continuar mi aprendizaje en spring boot?
te lo agradecería 🙏🙏🙏🙏
Muchas gracias por el video, todo muy claro y bien explicado. Podria explicar el uso de DTO. Saludos
Gracias Cristian, lo tendré en cuenta.
Hola gracias por tu video tan completo y detallado. Muy didactico. Enseñar es un acto de amor. Tienes un video donde dices como hiciste tu pagina principal de Git? Donde mencionas tus hobbies me refiero. Eso que aparece antes de los repositorios. Yo quisiera colocar info asi, como lo hiciste.
Super, ¿tienes más videos de Springboot?
BUEN TUTORIAL TIO VIX, ME GUSTA CUANDO ESCRIBES EL CODIGO Y VAS EXPLICANDO PARA QUE SIRVE. YO SUELO USAR MAS EL @AUTOWIRED QUE LA OTRA FORMA. 🙂
Muchas gracias el vídeo está genial :D una duda, ¿si quiero conectar el proyecto a una base de datos mySql cambia mucho? ¿que tendría que ver?
¿Las excepciones creadas se pueden utitlizar manera general en cualquier error? O solo corresponden a lo relacionado con el Task
hola una consulta, de donde usualmente se saca esos codigos replay que mencionaste, como el SwaggerConfig y el de
ExceptionHandler? buen video muchas graciass!!!
Una pregunta los DTO solo son usados para transformar la información que se recibe ? Se puede usar de alguna manera para transformar la información que se muestra ? Y si tengo una consulta que se forma de la unión de varias tablas puedo usar Mapper para responder esa consulta o debo hacer una native query?
Una duda, tendras pensado sacar una parte complementaria a este sobre el uso de jwdt y los componentes de seguridad... entiendo que si pones esa parte seria un video enorme, pero seria genial poder complementarlo... genial el trabajo que estas haciendo.
Hola, sabes que varias personas lo han pedido, creo que me voy a animar a hacerlo si, ahora en la parte 2 de este ya comprometí pruebas unitarias y de integración, pero si podemos hacer una parte 3 sobre el mismo proyecto y cubrimos la parte de Spring Security, estaría bien si.
@@SACAViXTech Super... justo hoy que puede descansar me quede en la casa y pase el video completo... me quede con una aplicacion para mi portafolio y las cosas bastante clara sobre lo que explicas en el proyecto...
Hay una parte donde dices que se viene un curso, es un curso de pago? o sera gratis a aqui mismo en CZcams?
Gracias por responder.
@@franciscoespinosagonzales2331 genial que lo pudiste ver, será gratuito 😃
Muy buen video, explicaciones claras y concisas. Tengo una duda, podrías haber integrado la dependencia de Spring Boot DevTools para que se inicialice la aplicación automaticamente cada vez que se detecte un cambio?
Hola, si es correcto, podía haberlo hecho, recomendado para ir más rápido, gracias por tu comentario 👍
hola desde chile, consulta necesito realizar unos servicios que traiga una lista de fechas aleatorias y que muestre las que se omiten aleatiriamente tambien, por fa me puedes explicar mas menos como puedo realizarlo por favor, gracias, tus videos son muy buenos
¿En la clase TaskInDTO no faltó implementar la interfaz Serializable?
Hola Profe, saludo y gracias por estos aportes a nuestro conocimiento. Por favor me orientas para conocer como comprar o descargar tu Libro. Gracias
Hola Gonzalo como estás? Gracias por tu comentario, en realidad no es necesario comprarlo directamente, puede colaborar con el canal en Patreon y ahí esta disponible, en los comentarios del vídeo está como hacerlo, si se te complica agregame en linkedin y hablamos in@yoandypv
Saludos Buenos dias excelente video. Termine de comprender muchas cosas que aun no entendia. Ahora una pregunta para conocer tu opinion. Si el metodo save del Jpa Repository agrega el registro si el id es 0 o no existe y lo modifica si existe, es posible utilizar solo el request patch o post para modificar o agregar un registro. Que piensas???
Hola Edgar los verbos HTTP son solo convenciones semánticas, puedes usar un post para obtener datos y un patch para crear un recurso, funciona pero semánticamente no está está bien. Lo correcto es Post para crear nuevos recursos, put para actualizar un recurso entero y patch para una actualización parcial. Internamente a nivel jpa puedes usar un save para post y put, pero para un patch es más recomendable una un update con una query nativa que solo cambie lo que es necesario.
Buen video, muchas gracias :) , una pregunta que plugin tienes para que se te vea la consola de esa forma ? El único que encontré se llama Grep Console pero el tuyo se ve mejor
Ni idea, en realidad como viene por defecto :-)
Voy a echar mucho de menos Intellij Idea Ultimate cuando se me termine el año de estudiante... voy a tener que matricularme en cualquier cosa para seguir con el IDE gratuito 😁😁
Hola que JDK se puede usar? el version SE está bien o se ocupa algo que sea Java EE? Gracias
Hola Liliana instalate la sdk normal del sitio de Oracle, o la openjdk, si usas Linux o Mac puedes usar sdkman
He visto otros videos que crean el archivo TaskServiceImpl es ahi donde hacen la logica de programacion y tu lo haces en el TaskService. eso es valido tambien.?
Es solo un tema de nombres, pero lo mejor es seguir un solo enfoque, particularmente me gusta uno como el que planteas y no como el que seguí en el video (lo hice así por un tema de simplicidad), pero lo mejor es la interfaz o abstracción llamarla TaskService y la implementación TaskServiceImpl. Pero no es una regla, sino una preferencia nada mas.
Trabajas en Android Studio?
Cuando hago el POST va bien sin errores, pero me muestra esto:
{}
Y al hacer el GET me sale:
[
{},
{}
]
Lo correcto sería que pusiera:
[
{
"description": "Prueba1",
"eta": "2023-03-10T22:32:30.769Z",
"title": "Prueba33"
},
{
"description": "Prueba2",
"eta": "2023-03-10T22:32:30.769Z",
"title": "Prueba2"
}
]
Sin embargo cuando me meto a la base de datos y hago un Select, sí me salen todos los campos correctamente.
Si alguien pudiera decirme por qué pasa eso y cómo solucionarlo se lo agradecería.
Un saludo
Está muy bueno el video, muy bien explicado, pero me queda una duda en la parte de persistencia, ¿dónde está la implementación del método findAllByTaskStatus? ¿Por qué en markTaskAsFinished se realiza una query a la base de datos y en findAllByTaskStatus no? Saludos
Hola, eso es porque usa la magia de Spring Data JPA, puedes aprender mas aca: docs.spring.io/spring-data/jpa/docs/current/reference/html/
Por lo que estuve viendo Spring crea la implementacion de los metodos find si tienen como parte de su nombre algun atributo de la clase ejemplo: findAllByNombre, findAllByPrecio..y asi con cualquier atributo de la clase que esta usando el repositorio.
Máster está bien que el entity llegue al controlador por medio del service y se devuelva al cliente o toca transformarlo en un dto en el service y devolver un taskOutDto? Muchas gracias explicas muy bien
Para hacerlo bien, no debe llegar nunca, en el próximo video voy a hablar de ese tema precisamente, sale el lunes. Gracias por comentar 😃
@@SACAViXTech gracias a ti por tomar el tiempo para responder trabajo con un CMS en java pero quiero más retos así que estoy estudiando spring boot y tu canal me ha ayudado mucho
Hola me encantan tus videos una pregunta, como hago para que en el menu de generacion de proyectos me salga el generador de spring intializr??
Hola si usas community debes instalar un plugin, sino puedes hacerlo por la web directamente y descargar el proyecto, luego abrirlo por el ij
Déjame dicho si lo logras ?
@@SACAViXTech instale el plugin SpringBootGen y el Spring Boot Assistant y no me aparece el generador todavia
@@M4rcos.j parece que solo se puede con la otra version, no con la community. yo me instale la otra con el email de mi universidad que te dan un año gratis, que se puede ir renovando y ya me aparecio . actualmente estoy teniendo problemas con la vista de swagger-ui.html pero bueno supongo que lo resolvere
@@matiasesquivel5166 pudiste solucionar el problema
Hola Yoandy, vuelvo a escribirte con una duda particular, ya que no he visto info al respecto y tú tienes mucha experiencia, tal vez me puedas ayudar.
Supongamos que tengo una entity en la db y una de las propiedades de esa entity es una imagen. Puede devolverse la imagen en el json? Es decir, por ejemplo: id, name, edad, ByteArrayResource o MultipartFile
Yo lo he intentado devolver en un dto pero no encuentro la forma.
Me han dicho que me conviene devolver la imagen en otra response
Hola Daniel, poder se puede, pero lo más recomendable es devolver la URL de la imagen en un CDN o si es algo más precario en un servidor de contenido estático detras de un Nginx, no es recomendable devolver un base64 o algo de la imagen, causa overhead innecesario
@@SACAViXTech muchas gracias Yoandi!! El tema es que el proyecto recomienda que las imágenes se encuentren en la db. Por eso se me ocurrió devolverlas como una entidad asociada OneToMany. Estoy totalmente de acuerdo en que lo que dices, es lo mejor, pero en mi caso, tal vez tendria que llamar otro endpoint en el mismo botón y que traiga el json con los datos y otro con la imagen. Es buena idea? Gracias de nuevo amigo. Abrazo!!
una consulta un API REST es lo mismo que decir MicroServicio ???
Hola RB , no, no es lo mismo un API Rest provee un mecanismo basado en la patrón de arquitectura REST para comunicar aplicaciones, los microservicios son un estilo arquitectónico para construir aplicaciones como un grupo de pequeños servicios, la relación es que a menudo estos pequeños servicios se comunican usando REST pero pueden usarse otros métodos de comunicación. Gracias por comentar
@@SACAViXTech a ya pero entonces este turorial que has hecho es un servicio API REST que podría incorporarse a un microservicio o agregarse a un conjunto de servicio que equivale a un microservicio ? me gustaría que hicieras un video que relacione un servigio API REST Acon microservicio ya qur no lo entiendo muy bien
1:24:55 por que el TASK_STATUS se guarda como numero ?
Hola Bruno, eso es porque es un ENUM y toma por orden 0, 1, 2 ... y guarda en base la posición del ENUM, eso se puede cambiar y decirle que guarde el String, por defecto guarda el ordinal que es el número, en cambio puedes decirle que guarde el string anotando el tipo del enum con esto encima @Enumerated(EnumType.STRING). Pruébalo y me cuentas.
Saludos !
Uff tengo un problema, estoy en el min 20 pero no logro que mi api me muestre el swagger. No da error, corre perfectamente pero no me saca el swagger. Que puede ser?
Hola Arlan, asegúrate estés usando las mismas versiones del ejemplo, en ocasiones tiene problemas de compatibilidad o comparte el código en un git y lo miro si quieres
@@SACAViXTech PERFECTO! muchisimas gracias. Geniales sus videos!!! Un placer contar con su ayuda!
crei que api rest era un enlace externo pero tu usas localhost
Podrias compartir el codigo del proyecto . gracias
Con gusto, el código está disponible desde el artículo del blog relacionado. Puedes acceder desde acá. sacavix.com/2022/03/06/aprende-spring-boot-con-un-proyecto-real/
@@SACAViXTech Muchas gracias
No me va la cosa esta. Joder
Muy bueno el video, felicitaciones. Consulta: En la arquitectura que planteas es valido que una clase que implementa IMapper puede comunicarse con un repository (o varios)?
Por ejemplo supongamos una clase PersonaInDtoToPersona .
Tengo una clase DTOPersona con un idPais(de tipo int ). Cuando voy a armar la verdadera clase persona esta mal que invoque al paisRepository.getPais(idPais), para luego agregar el pais a la clase Persona? y asi con otros objetos que puede tener la clase Persona adentro.(Direccion, Telefono,etc)
mi clase quedaría algo así
import com.example.procesador.persistence.entity.Persona;
import com.example.procesador.persistence.entity.Pais;
import com.example.procesador.persistence.repository.PaisRepository;
import com.example.procesador.service.dto.PersonaInDTO;
import org.springframework.stereotype.Component;
@Component
public class PersonaInDtoToPersona implements IMapper {
private final PaisRepository paisRepository;
public PersonatInDtoToPersona(PaisRepository paisRepository) {
this.paisRepository = paisRepository;
}
@Override
public TransactionData map(TransactionDataInDTO in) {
TransactionData transactionData = new TransactionData();
Pais pais=paisRepository.getById(in.getIdPais());
persona.setPais(pais);
persona.setNombre(....
persona.setApellido(...
return persona;
}
}
Desde uruguay, muchas gracias !!
Hola Maxi, poder se puede, pero creo que pudiera quedar mejor si abstraes los mappers del repositorio, el mapper debe ser algo noble, no debería depender del acceso al repositorio o a otro recurso externo. Un mapper debería tener solo un método llamado map que recibe como parámetros A y B en tu caso PersonaInDTO y Persona, y en todo caso en tu clase de Service inyectas ese IMapper con el qualifier del PersonaInDtoToPersona, de esta forma queda totalmente separado. Como lo tienes ahi el mapper depende de PaisRepository y probablemente el servicio donde inyectas ese mapper tambien tenga alguna dependencia de PaisRepository.
Bueno espero haberte ayudado algo, te recomiendo el libro "Arquitectura limpia", aborda mucho estos temas y sobre todo lo relacionado con las relaciones de dependencia y las "razones de cambio", que te aplican en este caso.
Un abrazo !
@@SACAViXTech muchas gracias. Si tenes razon. Opte por terminar de "completarlo" con los objetos pesados que tiene adentro en la clase service..