diff --git a/mapstruct/src/main/java/com/baeldung/context/MappingContext.java b/mapstruct/src/main/java/com/baeldung/context/MappingContext.java new file mode 100644 index 000000000000..6d2228d0375f --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/context/MappingContext.java @@ -0,0 +1,9 @@ +package com.baeldung.context; + +public class MappingContext { + + public String normalizeName(String name) { + return name == null ? null : name.trim() + .toUpperCase(); + } +} diff --git a/mapstruct/src/main/java/com/baeldung/mapper/CustomerDtoMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/CustomerDtoMapper.java index 2c84f801670f..d956e0a8cfd1 100644 --- a/mapstruct/src/main/java/com/baeldung/mapper/CustomerDtoMapper.java +++ b/mapstruct/src/main/java/com/baeldung/mapper/CustomerDtoMapper.java @@ -1,8 +1,12 @@ package com.baeldung.mapper; +import org.mapstruct.AfterMapping; +import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import com.baeldung.context.MappingContext; import com.baeldung.dto.CustomerDto; import com.baeldung.entity.Customer; @@ -12,4 +16,14 @@ public interface CustomerDtoMapper { @Mapping(source = "firstName", target = "forename") @Mapping(source = "lastName", target = "surname") CustomerDto from(Customer customer); + + @Mapping(source = "firstName", target = "forename") + @Mapping(source = "lastName", target = "surname") + CustomerDto from(Customer customer, @Context MappingContext context); + + @AfterMapping + default void normalize(@MappingTarget CustomerDto dto, @Context MappingContext context) { + dto.setForename(context.normalizeName(dto.getForename())); + dto.setSurname(context.normalizeName(dto.getSurname())); + } } diff --git a/mapstruct/src/test/java/com/baeldung/mapper/CustomerDtoMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapper/CustomerDtoMapperUnitTest.java index cded90138bfc..a71c62d7b65f 100644 --- a/mapstruct/src/test/java/com/baeldung/mapper/CustomerDtoMapperUnitTest.java +++ b/mapstruct/src/test/java/com/baeldung/mapper/CustomerDtoMapperUnitTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; +import com.baeldung.context.MappingContext; import com.baeldung.dto.CustomerDto; import com.baeldung.entity.Customer; @@ -26,4 +27,15 @@ void testGivenCustomer_mapsToCustomerDto() { assertEquals(customerDto.getForename(), customer.getFirstName()); assertEquals(customerDto.getSurname(), customer.getLastName()); } + + @Test + void givenCustomer_whenMappedUsingContext_thenReturnsFormattedDto() { + Customer customer = new Customer(); + customer.setFirstName(" max "); + customer.setLastName(" powers "); + MappingContext context = new MappingContext(); + CustomerDto dto = customerDtoMapper.from(customer, context); + assertEquals("MAX", dto.getForename()); + assertEquals("POWERS", dto.getSurname()); + } }