Advanced MapStruct for automated DTO to Entity mapping and vice versa
Written by: Gabriel Voicu
Start this tutorial about MapStruct with the introduction.
MapStruct tries to map the field from one object to another automatically but when the objects are different you can map the object’s fields explicitly.
pom.xml
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.2.0.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.2.0.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
Animal class
public class Animal {
private Breed breed;
private Owner owner;
//getters & setters
}
Breed class
public class Breed {
private String name;
private String country;
private Integer height;
//getters & setters
}
Owner class
public class Owner {
private String name;
private String address;
//getters & setters
}
AnimalDTO class
public class AnimalDTO {
private String xName;
private String zName;
//getters & setters
}
The Mapper
AnimalAnimalDTOMapper Interface
@Mapper
public interface AnimalAnimalDTOMapper {
AnimalAnimalDTOMapper INSTANCE = Mappers.getMapper(AnimalAnimalDTOMapper.class);
@Mappings({
@Mapping(source = "breed.name", target = "xName"),
@Mapping(source = "owner.name", target = "zName")}
)
AnimalDTO objToDto(Animal animal);
Animal dtoToObj(AnimalDTO animalDTO);
}
And the action begins
@GetMapping(value = "/mapstruct_adv_obj_to_dto.action")
public AnimalDTO mapstructAdvObjToDto() {
Animal animal = new Animal(
new Breed("Boxer", "Germany", 120),
new Owner("Gabriel Voicu", "Krakovia 10A")
);
AnimalDTO animalDTO = AnimalAnimalDTOMapper.INSTANCE.objToDto(animal);
return animalDTO;
}