MapStruct는 여러 계층 간의 DTO를 매핑하는 라이브러리입니다. 객체들에 대한 매핑 코드를 작성하는 것은 지루하고 오류가 발생하기 쉬우므로 이를 최대한 자동화하여 단순화하는 것을 목표로 합니다.
인터페이스만 작성하면 구현부는 컴파일 시점에 자동 생성되기 때문에 손쉽게 매핑할 수 있습니다.
사용법
@Mapper(componentModel = "spring")
public interface OrderReqDTOMapper {
OrderCommand toCommand(OrderReqDTO orderReqDTO,
String productId,
String productName
);
@Mappings({
@Mapping(target = "productId", ignore = true),
@Mapping(source = "reOrderYn", target = "reOrderYn", ignore = true)
})
OrderCommand toCommand(OrderReqDTO orderReqDTO);
}
Mapping의 설정 값 중 source는 메서드로 반환하려는 객체의 필드 값이고, target은 매개변수의 필드 값입니다. 이렇게 작성하고 어플리케이션 실행 시 컴파일 단계에서 구현 클래스가 자동생성 됩니다.
@Mapper(componentModel = “spring”)
- 자동 생성되는 구현 클래스는 스프링의 싱글톤 빈으로 관리하겠다는 설정입니다.
@Mappings
- Mapping 설정 여러 개를 할 때 사용합니다.
@Mapping(target = “productId”, ignore = true)
- source에는 존재하나 target에는 존재하지 않을 경우 매핑하지 않겠다는 설정입니다.
@Mapping(source = “reOrderYn”, target = “ reOrderYn ”, ignore = true)
- 해당 필드 값은 매핑을 하지 않겠다는 설정입니다.
Mapper 인터페이스 변경 및 삭제 시 에러
Failed to parse configuration class []; nested exception is java.io.FileNotFoundException: class path resource [] cannot be opened because it does not exist
Mapper 인터페이스의 경로를 찾지 못해서 발생하는 에러입니다. 파일 이름을 변경하거나 삭제해도 계속 발생할 경우 인텔리제이의 빌드에서 문제가 생긴 상황일 수 있습니다.
해결 방법
Gradle 탭에서 Reload Al Gradle Projects 아이콘을 클릭해줍니다. 해당 아이콘은 Gradle 프로젝트를 다시 빌드하고 모든 종속성과 플러그인을 다시 로드해줍니다.
이후 build 메뉴에서 Rebuild Project를 선택합니다. 실행 시 이전에 생성된 모든 빌드 파일을 제거 후 다시 빌드를 합니다.
참고자료
'Spring' 카테고리의 다른 글
AbstractAggregateRoot 로 도메인 이벤트 등록하기 (1) | 2023.12.05 |
---|---|
Save, SaveAndFlush 차이 (0) | 2023.11.28 |
Save 메서드 동작 원리 (1) | 2023.11.28 |
Valid 어노테이션 커스텀해서 사용하기 (0) | 2023.10.22 |
Valid, Validated 어노테이션 (0) | 2023.09.24 |