Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Entity to DTO Mapping in Spring Boot
📖 Scenario: You are building a simple Spring Boot application to manage books in a library. The data is stored in an entity class, but you want to send only selected information to the user through a Data Transfer Object (DTO).
🎯 Goal: Learn how to create an entity class, a DTO class, and map data from the entity to the DTO in a clean and simple way.
📋 What You'll Learn
Create a Book entity class with fields id, title, author, and price.
Create a BookDTO class with fields title and author only.
Create a method to convert a Book entity to a BookDTO.
Use the mapping method to create a BookDTO from a Book instance.
💡 Why This Matters
🌍 Real World
In real applications, entities often contain sensitive or extra data not needed by users. DTOs help send only the necessary data, improving security and performance.
💼 Career
Understanding entity to DTO mapping is essential for backend developers working with Spring Boot to build clean, maintainable APIs.
Progress0 / 4 steps
1
Create the Book entity class
Create a class called Book with private fields Long id, String title, String author, and double price. Include public getters and setters for each field.
Spring Boot
Hint
Define private fields and generate public getters and setters for each field.
2
Create the BookDTO class
Create a class called BookDTO with private fields String title and String author. Include public getters and setters for these fields.
Spring Boot
Hint
Define the BookDTO class with only title and author fields and their getters and setters.
3
Create a method to map Book to BookDTO
Inside the BookDTO class, create a public static method called fromEntity that takes a Book object as a parameter and returns a BookDTO object. Copy the title and author values from the Book to the new BookDTO.
Spring Boot
Hint
Create a static method that creates a new BookDTO, copies title and author from the Book parameter, and returns the DTO.
4
Use the mapping method to create a BookDTO
Create a Book object called book and set its title to "Spring Boot Guide" and author to "John Doe". Then create a BookDTO object called bookDTO by calling BookDTO.fromEntity(book).
Spring Boot
Hint
Create a Book object, set title and author, then create a BookDTO by calling the fromEntity method.
Practice
(1/5)
1. What is the main purpose of mapping an Entity to a DTO in Spring Boot?
easy
A. To speed up database queries
B. To separate database structure from data sent to clients
C. To store data in a different database
D. To automatically generate database tables
Solution
Step 1: Understand Entity and DTO roles
Entity represents database data, DTO is for data transfer outside the app.
Step 2: Identify the purpose of mapping
Mapping hides database details and controls what data is sent to clients.
Final Answer:
To separate database structure from data sent to clients -> Option B
Quick Check:
Entity to DTO mapping = data separation [OK]
Hint: Think: Entity is internal, DTO is external data format [OK]
Common Mistakes:
Confusing DTO with database storage
Thinking mapping speeds up queries
Assuming DTO changes database schema
2. Which of the following is the correct way to manually map an Entity field name to a DTO field fullName in Java?
easy
A. entity.getName(dto.setFullName());
B. entity.setName(dto.getFullName());
C. dto.getFullName(entity.setName());
D. dto.setFullName(entity.getName());
Solution
Step 1: Identify source and target objects
Entity is source, DTO is target for mapping.
Step 2: Use getter on entity and setter on DTO
Correct syntax is calling entity.getName() and passing to dto.setFullName().
Final Answer:
dto.setFullName(entity.getName()); -> Option D
Quick Check:
Getter from entity, setter on DTO [OK]
Hint: Getter from entity, setter on DTO for mapping [OK]
Common Mistakes:
Reversing source and target in mapping
Using setter as getter or vice versa
Calling methods with wrong parameters
3. Given the following code snippet, what will be the output of dto.getAge() after mapping?
public class UserEntity {
private int age = 30;
public int getAge() { return age; }
}
public class UserDTO {
private int age;
public void setAge(int age) { this.age = age; }
public int getAge() { return age; }
}
UserEntity entity = new UserEntity();
UserDTO dto = new UserDTO();
dto.setAge(entity.getAge());
System.out.println(dto.getAge());
medium
A. 30
B. 0
C. null
D. Compilation error
Solution
Step 1: Check initial value in Entity
Entity's age is set to 30 by default.
Step 2: Map Entity age to DTO and print
DTO's age is set to entity.getAge(), so dto.getAge() returns 30.
4. Identify the error in this manual mapping method:
public UserDTO mapToDTO(UserEntity entity) {
UserDTO dto = new UserDTO();
dto.setName(entity.getFullName());
dto.setEmail(entity.getEmail());
return dto;
}
Assuming UserEntity has a getName() method but no getFullName() method.
medium
A. Setter methods used incorrectly
B. Missing return statement
C. Calling non-existent method getFullName() on entity
D. DTO object not created
Solution
Step 1: Check entity methods used
Code calls entity.getFullName(), but entity only has getName().
Step 2: Identify cause of error
Calling a method that does not exist causes a compile-time error.
Final Answer:
Calling non-existent method getFullName() on entity -> Option C
Quick Check:
Method must exist on entity for mapping [OK]
Hint: Verify entity methods before calling in mapping [OK]
Common Mistakes:
Assuming method names match automatically
Ignoring compile errors from wrong method calls
Confusing getter names between classes
5. You want to map a list of UserEntity objects to a list of UserDTO objects using Java streams in Spring Boot. Which code snippet correctly performs this mapping assuming a method mapToDTO(UserEntity entity) exists?
hard
A. List<UserDTO> dtos = entities.stream().map(this::mapToDTO).collect(Collectors.toList());
B. List<UserDTO> dtos = entities.map(entity -> mapToDTO(entity));
C. List<UserDTO> dtos = entities.forEach(entity -> mapToDTO(entity));
D. List<UserDTO> dtos = entities.stream().forEach(this::mapToDTO);
Solution
Step 1: Use stream() to process list
entities.stream() creates a stream to transform elements.
Step 2: Use map() to convert each entity to DTO
map(this::mapToDTO) applies the mapping method to each element.
Step 3: Collect results into a list
collect(Collectors.toList()) gathers mapped DTOs into a list.
Final Answer:
List<UserDTO> dtos = entities.stream().map(this::mapToDTO).collect(Collectors.toList()); -> Option A
Quick Check:
Stream map + collect to list = correct mapping [OK]
Hint: Use stream().map(...).collect(toList()) for list mapping [OK]