MapStruct for automated DTO to Entity mapping and vice versa

This code example demonstrates the use of MapStruct when we need to convert basic objects into DTOs.

We start by adding the MapStruct dependencies to a Spring project. Here we use a new project, but the procedure is the same for mature projects as well.

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>

For each entity we need a Mapper interface:

UtilizatorUtilizatorDTOMapper Interface@Mapper
public interface UtilizatorUtilizatorDTOMapper {
UtilizatorUtilizatorDTOMapper INSTANCE = Mappers.getMapper(UtilizatorUtilizatorDTOMapper.class);
UtilizatorDTO objToDto(Utilizator utilizator);
Utilizator dtoToObj(UtilizatorDTO destination);
}

Now we can build the entity and DTO:

Utilizator Entitypublic class Utilizator {
private String name;
private String address;
public Utilizator() {
}
public Utilizator(String name, String address) {
this.name = name;
this.address = address;
}
//getters & setters
}
UtilizatorDTOpublic class UtilizatorDTO {
private String name;
public UtilizatorDTO() {
}
public UtilizatorDTO(String name) {
this.name = name;
}
//getters & setters
}

For demonstration purposes we are going to use a Controller class to evaluate our Mapper.

Controller class@RestController
class Controller {
@GetMapping(value = "/mapstruct_simple_obj_to_dto.action")
public UtilizatorDTO mapstructSimpleObjToDto() {
Utilizator utilizator = new Utilizator("Gabi", "Krakovia 9A");
UtilizatorDTO utilizatorDTO = UtilizatorUtilizatorDTOMapper.INSTANCE.objToDto(utilizator);
return utilizatorDTO;
}

@GetMapping(value = "/mapstruct_simple_dto_to_obj.action")
public Utilizator mapstructSimpleDtoToObj() {
UtilizatorDTO utilizatorDTO = new UtilizatorDTO("Gabi");
Utilizator utilizator = UtilizatorUtilizatorDTOMapper.INSTANCE.dtoToObj(utilizatorDTO);
return utilizator;
}
}

Originally published at https://www.weinspire.tech on October 08, 2019.

--

--

--

Written by Gabriel Voicu — Senior Principal Lead Software Engineer @ Dell Technologies

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Web Scraping with Beautiful Soup — A Use Case

Processes and Threads

http://www.rtos.be/wp-content/uploads/2013/06/process_and_thread.png

Fuzzy file search for Windows PowerShell

Potential Laravel Newbie Headaches pt. 1

Sidekiq + Postgres Advisory Lock = Sanity Amidst Chaos

The Strategy Pattern in iOS Apps

Meta Freecity Aboriginal Recruitment Program Operation Guide

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
WeInspire Technologies

WeInspire Technologies

Written by Gabriel Voicu — Senior Principal Lead Software Engineer @ Dell Technologies

More from Medium

LogMasker — OpenSource masking library for Java

maven nested modules

Add Auth0 authentication to a Java application using Datawiza in 5 mins

Basic Concept of IoC & Dependency Injection in Spring Frame