Bird
Raised Fist0
Spring Bootframework~10 mins

Entity to DTO mapping in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

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
Concept Flow - Entity to DTO mapping
Start with Entity object
Create DTO instance
Copy data from Entity to DTO
Return DTO for use in API or UI
End
This flow shows how data moves from an Entity object to a DTO by creating a new DTO and copying relevant fields.
Execution Sample
Spring Boot
public class UserEntity {
  private Long id;
  private String name;

  public Long getId() {
    return id;
  }

  public String getName() {
    return name;
  }
}

public class UserDTO {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

public static UserDTO mapToDTO(UserEntity entity) {
  UserDTO dto = new UserDTO();
  dto.setName(entity.getName());
  return dto;
}
This code copies the 'name' field from a UserEntity to a UserDTO, leaving out the 'id' field.
Execution Table
StepActionEntity StateDTO StateResult
1Receive UserEntity with id=1, name='Alice'id=1, name='Alice'emptyReady to map
2Create new UserDTO instanceid=1, name='Alice'name=nullDTO created
3Copy name from Entity to DTOid=1, name='Alice'name='Alice'Name copied
4Return DTOid=1, name='Alice'name='Alice'DTO ready for use
💡 Mapping complete, DTO returned without id field
Variable Tracker
VariableStartAfter Step 2After Step 3Final
entityid=1, name='Alice'id=1, name='Alice'id=1, name='Alice'id=1, name='Alice'
dtonullname=nullname='Alice'name='Alice'
Key Moments - 2 Insights
Why doesn't the DTO have the 'id' field from the Entity?
The DTO is designed to expose only needed data, so 'id' is omitted intentionally as shown in step 3 of the execution_table.
What happens if the Entity's 'name' is null?
The DTO's 'name' will also be null after copying, as the mapping copies values directly (see step 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the DTO's 'name' after step 2?
Aempty string
B'Alice'
Cnull
Dundefined
💡 Hint
Check the 'DTO State' column at step 2 in the execution_table
At which step is the 'name' copied from Entity to DTO?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Action' column describing copying in the execution_table
If the Entity had an extra field 'email', what would happen to the DTO after mapping?
ADTO would have 'email' copied automatically
BDTO would ignore 'email' unless explicitly copied
CMapping would fail with error
DDTO would have 'email' set to null
💡 Hint
Mapping copies only fields shown in the code example, see execution_sample
Concept Snapshot
Entity to DTO mapping:
- Create a new DTO object
- Copy only needed fields from Entity
- DTO hides sensitive or unnecessary data
- Used to send clean data to UI or API
- Mapping can be manual or with tools like MapStruct
Full Transcript
Entity to DTO mapping means taking data from a database entity object and copying it into a simpler object called a DTO. This DTO only has the fields needed for the user interface or API, hiding others like database IDs. The process starts by receiving an entity, then creating a new DTO instance. Next, the relevant fields like 'name' are copied from the entity to the DTO. Finally, the DTO is returned for use. This keeps data clean and secure. The example showed copying the 'name' field from a UserEntity to a UserDTO. The 'id' field was left out intentionally. If the entity's field is null, the DTO's field will also be null after copying. This mapping can be done manually or with libraries. Understanding this helps keep backend and frontend data separate and safe.

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

  1. Step 1: Understand Entity and DTO roles

    Entity represents database data, DTO is for data transfer outside the app.
  2. Step 2: Identify the purpose of mapping

    Mapping hides database details and controls what data is sent to clients.
  3. Final Answer:

    To separate database structure from data sent to clients -> Option B
  4. 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

  1. Step 1: Identify source and target objects

    Entity is source, DTO is target for mapping.
  2. Step 2: Use getter on entity and setter on DTO

    Correct syntax is calling entity.getName() and passing to dto.setFullName().
  3. Final Answer:

    dto.setFullName(entity.getName()); -> Option D
  4. 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

  1. Step 1: Check initial value in Entity

    Entity's age is set to 30 by default.
  2. Step 2: Map Entity age to DTO and print

    DTO's age is set to entity.getAge(), so dto.getAge() returns 30.
  3. Final Answer:

    30 -> Option A
  4. Quick Check:

    Entity age 30 mapped to DTO age 30 [OK]
Hint: Mapping copies values exactly unless changed [OK]
Common Mistakes:
  • Assuming default int is null
  • Confusing getter/setter roles
  • Expecting compilation error without syntax issues
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

  1. Step 1: Check entity methods used

    Code calls entity.getFullName(), but entity only has getName().
  2. Step 2: Identify cause of error

    Calling a method that does not exist causes a compile-time error.
  3. Final Answer:

    Calling non-existent method getFullName() on entity -> Option C
  4. 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

  1. Step 1: Use stream() to process list

    entities.stream() creates a stream to transform elements.
  2. Step 2: Use map() to convert each entity to DTO

    map(this::mapToDTO) applies the mapping method to each element.
  3. Step 3: Collect results into a list

    collect(Collectors.toList()) gathers mapped DTOs into a list.
  4. Final Answer:

    List<UserDTO> dtos = entities.stream().map(this::mapToDTO).collect(Collectors.toList()); -> Option A
  5. Quick Check:

    Stream map + collect to list = correct mapping [OK]
Hint: Use stream().map(...).collect(toList()) for list mapping [OK]
Common Mistakes:
  • Using forEach instead of map for transformation
  • Calling map on list directly without stream()
  • Not collecting results after mapping