- Usar Lombok como herramienta que genera código común (boilerplate) en objetos Java
- Aplicar MapStruct para mapear los atributos de un objeto con los de un objeto diferente.
- Exponer los objetos creados con MapStruct como componentes de Spring.
El postwork se realizará en equipo, los cuales serán formados previamente a la sesión uno.
El propósito de este Postwork es retomar el proyecto del módulo anterior y realizar las modificaciones descritas a continuación.
-
Agrega las dependencias de Lombok y MapStruct en el archivo pom.xml del proyecto.
-
Los objetos del paquete
model
tienen, hasta ahora, solamente atributos, usa las siguientes anotaciones de Lombok:@Data
@Builder
@RequiredArgsConstructor
-
Asegúrate, en el panel de estructura de la clase, que los métodos se hayan generado de forma correcta y completa:
-
Dentro del paquete
controllers
agrega un subpaquetemappers
y agrega una interface de mape para cada uno de los tipos de objetos en el paquetemodel
(excluyendoRespuestaError
. -
Anota estas interfaces con
@Mapper
. Por el momento estas interfaces no tendrán métodos, los colocaremos en la siguiente sesión. -
La estructura del proyecto debe verse de la siguiente forma:
Solución
-
Agrega las dependencias de Lombok y MapStruct en el archivo pom.xml del proyecto.
<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${org.mapstruct.version}</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
-
Agrega las siguientes anotaciones de Lombok a cada clase del paquete
model
:@Data
@Builder
@RequiredArgsConstructor
A continuación te dejamos un ejemplode como deben de quedar:
@Data @Builder @RequiredArgsConstructor public class Etapa { @PositiveOrZero(message = "El identificador de la etapa no puede ser un número negativo") private long etapaId; @NotEmpty(message = "El nombre de la etapa no puede estar en blanco.") @Size(min = 4, max = 30, message = "El nombre de la etapa debe tener entre 4 y 30 letras.") private String nombre; @Positive(message = "La etapa debe tener un orden positivo mayor a cero") private int orden; }
-
Asegúrate, en el panel de estructura de la clase, que los métodos se hayan generado de forma correcta y completa:
-
Dentro del paquete
controllers
agrega un subpaquetemappers
y agrega una interface de mape para cada uno de los tipos de objetos en el paquetemodel
(excluyendoRespuestaError
.Anota estas interfaces con
@Mapper
. Por el momento estas interfaces no tendrán métodos, los colocaremos en la siguiente sesión.@Mapper public interface ClienteMapper { }
@Mapper public interface EtapaMapper { }
@Mapper public interface ProductoMapper { }
@Mapper public interface VentaMapper { }
@Mapper public interface VisitaMapper { }
-
La estructura del proyecto debe verse de la siguiente forma: