diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullCondition.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullCondition.java new file mode 100644 index 000000000000..22044f312fde --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullCondition.java @@ -0,0 +1,18 @@ +package com.baeldung.mapstruct.emptystringtonull; + +import org.mapstruct.Condition; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface EmptyStringToNullCondition { + + EmptyStringToNullCondition INSTANCE = Mappers.getMapper(EmptyStringToNullCondition.class); + + Teacher toTeacher(Student student); + + @Condition + default boolean isNotEmpty(String value) { + return value != null && !value.isEmpty(); + } +} diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullConditionSourceProperty.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullConditionSourceProperty.java new file mode 100644 index 000000000000..10b75beefeaa --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullConditionSourceProperty.java @@ -0,0 +1,23 @@ +package com.baeldung.mapstruct.emptystringtonull; + +import org.mapstruct.Condition; +import org.mapstruct.Mapper; +import org.mapstruct.TargetPropertyName; +import org.mapstruct.SourcePropertyName; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface EmptyStringToNullConditionSourceProperty { + + EmptyStringToNullConditionSourceProperty INSTANCE = Mappers.getMapper(EmptyStringToNullConditionSourceProperty.class); + + Teacher toTeacher(Student student); + + @Condition + default boolean isNotEmpty(String value, @TargetPropertyName String targetPropertyName, @SourcePropertyName String sourcePropertyName) { + if( sourcePropertyName.equals("lastName")) { + return value != null && !value.isEmpty(); + } + return true; + } +} diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullExpression.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullExpression.java new file mode 100644 index 000000000000..a8290ee0222c --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullExpression.java @@ -0,0 +1,13 @@ +package com.baeldung.mapstruct.emptystringtonull; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface EmptyStringToNullExpression { + EmptyStringToNullExpression INSTANCE = Mappers.getMapper(EmptyStringToNullExpression.class); + + @Mapping(target = "lastName", expression = "java(student.lastName.isEmpty() ? null : student.lastName)") + Teacher toTeacher(Student student); +} diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullGlobal.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullGlobal.java new file mode 100644 index 000000000000..3eb6975ae7f7 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/EmptyStringToNullGlobal.java @@ -0,0 +1,16 @@ +package com.baeldung.mapstruct.emptystringtonull; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface EmptyStringToNullGlobal { + + EmptyStringToNullGlobal INSTANCE = Mappers.getMapper(EmptyStringToNullGlobal.class); + + Teacher toTeacher(Student student); + + default String mapEmptyString(String string) { + return string != null && !string.isEmpty() ? string : null; + } +} diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/Student.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/Student.java new file mode 100644 index 000000000000..227ed2ec7c39 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/Student.java @@ -0,0 +1,11 @@ +package com.baeldung.mapstruct.emptystringtonull; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Student { + String firstName; + String lastName; +} diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/Teacher.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/Teacher.java new file mode 100644 index 000000000000..75d27fc4eb18 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/emptystringtonull/Teacher.java @@ -0,0 +1,11 @@ +package com.baeldung.mapstruct.emptystringtonull; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Teacher { + String firstName; + String lastName; +} diff --git a/mapstruct-2/src/test/java/com/baeldung/mapstruct/emptystringtonull/MapEmptyStringToNullUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/mapstruct/emptystringtonull/MapEmptyStringToNullUnitTest.java new file mode 100644 index 000000000000..61ec9efd2c6a --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/mapstruct/emptystringtonull/MapEmptyStringToNullUnitTest.java @@ -0,0 +1,46 @@ +package com.baeldung.mapstruct.emptystringtonull; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import org.junit.jupiter.api.Test; + +class MapEmptyStringToNullUnitTest { + + @Test + void givenAMapperWithGlobalNullHandling_whenConvertingEmptyString_thenOutputNull() { + EmptyStringToNullGlobal globalMapper = EmptyStringToNullGlobal.INSTANCE; + Student student = new Student("Steve", ""); + Teacher teacher = globalMapper.toTeacher(student); + assertEquals("Steve", teacher.firstName); + assertNull(teacher.lastName); + } + + @Test + void givenAMapperWithConditionAnnotationNullHandling_whenConvertingEmptyString_thenOutputNull() { + EmptyStringToNullCondition conditionMapper = EmptyStringToNullCondition.INSTANCE; + Student student = new Student("Steve", ""); + Teacher teacher = conditionMapper.toTeacher(student); + assertEquals("Steve", teacher.firstName); + assertNull(teacher.lastName); + } + + @Test + void givenAMapperUsingExpressionBasedNullHandling_whenConvertingEmptyString_thenOutputNull() { + EmptyStringToNullExpression expressionMapper = EmptyStringToNullExpression.INSTANCE; + Student student = new Student("Steve", ""); + Teacher teacher = expressionMapper.toTeacher(student); + assertEquals("Steve", teacher.firstName); + assertNull(teacher.lastName); + } + + @Test + void givenAMapperUsingConditionBasedNullHandlingWithPropertyNames_whenConvertingEmptyString_thenOutputNull() { + EmptyStringToNullConditionSourceProperty expressionMapper = EmptyStringToNullConditionSourceProperty.INSTANCE; + Student student = new Student("Steve", ""); + Teacher teacher = expressionMapper.toTeacher(student); + assertEquals("Steve", teacher.firstName); + assertNull(teacher.lastName); + } + +}