-
[MapStruct] Enum과 Integer 간에 매핑 설정 방법자바/mapstruct 2021. 1. 16. 02:22
이번 시간에는 MapStruct를 이용하여 Mapper 생성 시 Enum과 Integer간에 매핑하는 방법에 대해서 알아보도록 하겠습니다.
우선 다음과 같이 01은 MALE을 뜻하고 02는 FEMAIL을 뜻하는 Enum이 존재합니다.
클라이언트로부터 성별의 값으로 01, 02의 Integer 값을 수신하므로 그 뜻을 좀더 명확하게 표현하기 위해서 Enum을 생성합니다.
public enum Gender { MALE(01), FEMALE(02), ; private Integer value; private static Map map = new HashMap(); Gender(Integer value) { this.value = value; } static { for (Gender gender : Gender.values()) { map.put(gender.value, gender); } } public static Gender valueOf(Integer gender) { return (Gender) map.get(gender); } public Integer getValue() { return this.value; } }
해당 Gender를 멤버 변수로 가지는 Session 엔티티를 생성합니다.
@NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class Session { @Id private Long id; private String phone; private String name; private LocalDate birth; private Gender gender; public SessionInfo(Long id, String phone, String name, LocalDate birth, Gender gender) { this.id = id; this.phone = phone; this.name = name; this.birth = birth; this.gender = gender; } }
Session 엔티티에 대한 DTO를 생성합니다.
@Getter public class SessionDTO { private Long id; private String phone; private String name; private LocalDate birth; private Integer gender; public SessionDTO(Long id, String phone, String name, LocalDate birth, Integer gender) { this.id = id; this.phone = phone; this.name = name; this.birth = birth; this.gender = gender; } }
Session <-> SessionDTO간에 매핑을 지원하는 Mapper를 생성합니다.
- Gender <-> Integer간에 매핑을 위한 default 메소드를 생성합니다.
@Mapper public interface SessionInfoMapper { SessionInfoMapper INSTANCE = Mappers.getMapper(SessionInfoMapper.class); SessionInfoDTO.Request.Create map(SessionInfo source); SessionInfo map(SessionInfoDTO.Request.Create source); default Gender map(Integer value) { return Gender.valueOf(value); } default Integer map(Gender gender) { return gender.getValue(); } }
이와 같이 구성이 되어 있으면 아래와 같이 테스트를 통해서 정상적으로 매핑되는 것을 확인 할 수 있습니다.
@SpringBootTest public class SessionServiceTest { @Test public void Enum매핑테스트() throws Exception { SessionInfoDTO sessionInfoDto = new SessionInfoDTO(123l, "01047071628", "장지현", LocalDate.now(), 2); SessionInfo sessionInfo = SessionInfoMapper.INSTANCE.map(create); Assertions.assertThat(sessionInfo.getGender()).isEqualTo(Gender.FEMALE); } }
'자바 > mapstruct' 카테고리의 다른 글
[MapStruct] 중첩된 빈 프로퍼티를 현재 타겟에 매핑시키기 (0) 2020.12.01 [MapStruct] 기본 매핑 (0) 2020.11.26 [MapStruct] 여러 개의 소스 파라미터를 가지는 매핑 함수 (0) 2020.11.23