Spring Boot DTO ModelMapper Example

In this previous example, we have seen how to use DTO in Spring boot application and we have written a code to manually convert Entity to DTO. In this example, we will see how to use ModelMapper library to automatically convert Entity to DTO and vice-versa.

Here are the simple steps to follow to use ModelMapper library in Spring boot application.

The source code of this tutorial available on our GitHub repository at https://github.com/RameshMF/springboot-dto-tutorial

YouTube Video

1. Add ModelMapper Dependency

Open pom.xml file and add the following ModelMapper dependency:

<!-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper -->	<dependency>	<groupId>org.modelmapper</groupId>	<artifactId>modelmapper</artifactId>	<version>2.4.4</version>	</dependency>
Here is the complete pom.xml for your reference:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">	<modelVersion>4.0.0</modelVersion>	<parent>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-parent</artifactId>	<version>2.5.4</version>	<relativePath/> <!-- lookup parent from repository -->	</parent>	<groupId>net.javaguides</groupId>	<artifactId>springboot-dto-tutorial</artifactId>	<version>0.0.1-SNAPSHOT</version>	<name>springboot-dto-tutorial</name>	<description>Demo project for Spring Boot and DTO</description>	<properties>	<java.version>11</java.version>	</properties>	<dependencies>	<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-data-jpa</artifactId>	</dependency>	<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-web</artifactId>	</dependency>	<dependency>	<groupId>com.h2database</groupId>	<artifactId>h2</artifactId>	<scope>runtime</scope>	</dependency>	<dependency>	<groupId>org.projectlombok</groupId>	<artifactId>lombok</artifactId>	<optional>true</optional>	</dependency>	<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-test</artifactId>	<scope>test</scope>	</dependency>	<!-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper -->	<dependency>	<groupId>org.modelmapper</groupId>	<artifactId>modelmapper</artifactId>	<version>2.4.4</version>	</dependency>	</dependencies>	<build>	<plugins>	<plugin>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-maven-plugin</artifactId>	<configuration>	<excludes>	<exclude>	<groupId>org.projectlombok</groupId>	<artifactId>lombok</artifactId>	</exclude>	</excludes>	</configuration>	</plugin>	</plugins>	</build> </project>

2. Configure ModelMapper as Spring Bean

Open Spring boot main application class and add the following ModelMapper bean configuration:

@Bean	public ModelMapper modelMapper(){	return new ModelMapper();	}

Here is the complete code:

package net.javaguides.springboot; import net.javaguides.springboot.model.Location; import net.javaguides.springboot.model.User; import net.javaguides.springboot.repository.LocationRepository; import net.javaguides.springboot.repository.UserRepository; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootApplication public class SpringbootDtoTutorialApplication implements CommandLineRunner {	@Bean	public ModelMapper modelMapper(){	return new ModelMapper();	}	public static void main(String[] args) {	SpringApplication.run(SpringbootDtoTutorialApplication.class, args);	}	@Autowired	private UserRepository userRepository;	@Autowired	private LocationRepository locationRepository;	@Override	public void run(String... args) throws Exception {	Location location = new Location();	location.setPlace("Pune");	location.setDescription("Pune is great place to live");	location.setLongitude(40.5);	location.setLatitude(30.6);	locationRepository.save(location);	User user1 = new User();	user1.setFirstName("Ramesh");	user1.setLastName("Fadatare");	user1.setEmail("ramesh@gmail.com");	user1.setPassword("secret");	user1.setLocation(location);	userRepository.save(user1);	User user2 = new User();	user2.setFirstName("John");	user2.setLastName("Cena");	user2.setEmail("john@gmail.com");	user2.setPassword("secret");	user2.setLocation(location);	userRepository.save(user2);	} }

3. Inject or Autowire ModelMapper Bean in Service Class

Let's inject or autowire ModelMapper bean to use it's methods:

 @Autowired private UserRepository userRepository;

Here is the complete code:

package net.javaguides.springboot.service; import net.javaguides.springboot.dto.UserLocationDTO; import net.javaguides.springboot.model.User; import net.javaguides.springboot.repository.UserRepository; import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; @Service public class UserService { @Autowired private UserRepository userRepository; @Autowired private ModelMapper modelMapper; // .... }

4. Convert Entity to DTO and Vice-Versa using ModelMapper

 private UserLocationDTO convertEntityToDto(User user){ modelMapper.getConfiguration() .setMatchingStrategy(MatchingStrategies.LOOSE); UserLocationDTO userLocationDTO = new UserLocationDTO(); userLocationDTO = modelMapper.map(user, UserLocationDTO.class); return userLocationDTO; } private User convertDtoToEntity(UserLocationDTO userLocationDTO){ modelMapper.getConfiguration() .setMatchingStrategy(MatchingStrategies.LOOSE); User user = new User(); user = modelMapper.map(userLocationDTO, User.class); return user; }

Here is the complete code:

 private UserLocationDTO convertEntityToDto(User user){ modelMapper.getConfiguration() .setMatchingStrategy(MatchingStrategies.LOOSE); UserLocationDTO userLocationDTO = new UserLocationDTO(); userLocationDTO = modelMapper.map(user, UserLocationDTO.class); return userLocationDTO; } private User convertDtoToEntity(UserLocationDTO userLocationDTO){ modelMapper.getConfiguration() .setMatchingStrategy(MatchingStrategies.LOOSE); User user = new User(); user = modelMapper.map(userLocationDTO, User.class); return user; }

Run and Test Spring boot application

Just go to the root directory of the application and type the following command to run it -

$ mvn spring-boot:run 

The application will start at Spring Boot’s default tomcat port 8080.

Hit below URL in browser to get response of the REST API:

http://localhost:8080/users-location

Conclusion

In this tutorial, we have seen how to use ModelMapper library to automatically convert Entity to DTO and vice-versa in Spring boot application.

The source code of this tutorial available on our GitHub repository at https://github.com/RameshMF/springboot-dto-tutorial

Comments