코드를 실행하면서 가장 문제가 되었던 부분 중 하나가 Mapper였다.
분명히 메서드 파라미터 타입, 리턴 타입 모두 잘 작성되어있고 의존라이브러리도 추가되어있고,
애너테이션도 잘 붙어있고 인터페이스 타입으로 생성되어있고 Entity, Dto 필드명도 일치하는데 뭐가 문제일까 한참을 고민했다.
심지어 또 어떨때는 생성이 되기도하고 어떨땐 안되기도 해서 정말 뭐지? 라는 고민을 많이했다.
(그래서 초반에는 일단 코드를 돌려야겠다는 생각에 디폴트 매퍼를 생성해서 사용하기도 했다.)
이제 코드가 어느정도 정리되고나니 여유가 생겨서 해당 부분 문제를 해결해보기로 했다.
구글링해보니 이유가 명확히 있었다. 사용중인 Lombok과 MapStruct간에 충돌이 나서 그렇다고 한다.
Getter, Setter를 사용해 MapperImpl이 생성되므로 build 파일에서 lombok과 mapstruct의 순서가 영향을 끼친다고 한다.
이에 관계 없이 두가지 라이브러리를 동시에 사용하기 위해서는 lombok-mapstruct-binding을 추가해주면 된다고 한다.
(MapStruct는 1.2.0부터, Lombok은 1.16.14부터 지원)
implementation 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
위 내용을 추가했더니 모든 필드에 null값을 가진상태로 리턴되었던 매퍼가 정상적으로 값을 할당하고 있는것을 확인할 수 있었다.
참고자료
'부트캠프 개발일기 > Pre-Project' 카테고리의 다른 글
93일차: Pre-Project Day 13 (프리프로젝트 회고) (0) | 2023.06.27 |
---|---|
92일차: Pre-Project Day 12(배포: EC2, S3, RDS, gradle) (0) | 2023.06.26 |
90일차: Pre-Project Day 10-2 (코드 Merge, CORS 오류 해결, Ngrok) (0) | 2023.06.23 |
90일차: Pre-Project Day 10-1 (인증 에러 처리: AuthenticationFailureHandler, AuthenticationEntryPoint) (0) | 2023.06.22 |
89일차: Pre-Project Day 9 (HandlerInterceptor, JWT 정보 가져오기) (0) | 2023.06.21 |