MapStruct 미작동문제 해결

귀찮Lee·2022년 8월 28일
1

Error Handling Log

목록 보기
5/8

MapStruct

  • Entity와 DTO 간의 데이터 구조 변환을 쉽게 도와주는 라이브러리 중 하나

  • Entity 와 DTO의 구조를 인식해야하므로 특정 형식이 필요함

    • 우선 순위가 높은 순으로 구현함
      1. Builder 패턴이 적용되어 있는 경우
      2. @AllArgsConstructor 가 있는 경우 (모든 필드의 파라미터를 가지는 생성자)
        • 기본 생성자가 포함되어 있는 경우, 2번이 제역할을 하지 못함
        • 정확한 내용은 직접 찾아봐야 함
      3. setter 메서드가 있는 경우

◎ 문제 상황

  • MapStruct의 형식을 맞추어 작성하였지만, Mapping이 정상적으로 처리되지 않음

    • Error 발생 또는 안에 정보가 들어있지 않은 DTO, Entity를 반환
    java: constructor SubResponse in class com.team17.preProject.member.dto.MemberDto.SubResponse cannot be applied to given types;
      required: long,java.lang.String,java.lang.String,java.lang.String
      found: no arguments
      reason: actual and formal argument lists differ in length

◎ 해결 방법

  • 문제 원인

    • MapStruct에서 @AllArgsConstructor, @Setter를 사용하는데 Lombok이 정상적으로 작동하지 않는다고 판단
      • build.gradle 에서 dependencies는 위에서부터 순서대로 실행
      • Lombok이 MapStruct보다 윗줄에 있어야 함
      • 그리고 Lombok의 dependencies 내용을 수정
  • 해결 방법

    • build.gradle 변경
    dependencies {
        implementation 'org.projectlombok:lombok:1.18.24'
        implementation 'org.mapstruct:mapstruct:1.5.1.Final'
        annotationProcessor "org.projectlombok:lombok:1.18.24"
        annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.1.Final'
    }

◎ 참고 자료

profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!

2개의 댓글

comment-user-thumbnail
2023년 2월 22일

너무너무 감사합니다. 덕분에 노트북 부술뻔했는데 겨우 참았습니다 고맙습니다.

1개의 답글