[Spring] Mapstruct와 lombok 같이 사용시 발생하는 문제

최성민·2021년 7월 17일
0

Spring

목록 보기
6/9
post-thumbnail

문제


lombok의 @Getter, @Setter 사용시, Mapstruct의 @Mapper(componentModel = "spring")를 사용하면 자동으로 코드를 생성하는데 제대로 생성되지 않음.

해결방법


// lombok
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.projectlombok:lombok:1.18.18'
compileOnly 'org.projectlombok:lombok'

// Mapstruct
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
testAnnotationProcessor "org.mapstruct:mapstruct-processor:1.4.2.Final"

명시적으로 setter method, getter method를 만들어주면 빌드가 잘되는 것을 확인함.
그래서 lombok의 @Getter @Setter가 제대로 연동이 안되는가 싶어서 검색해봤더니 역시나...
build.gradle의 디펜던시 순서가 중요하다고

Mapstruct는 1.2.0부터, Lombok은 1.16.14부터 지원


https://www.baeldung.com/mapstruct


https://projectlombok.org/changelog

롬복 BREAKING CHANGE에도 언급해있다. lombok-mapstruct-binding를 추가하라고...

순서를 롬복, mapstruct로 해도 문제는 해결됐는데 하라고하니까 일단 디펜던시에 추가함.




문제 상황


DTO

Entity

Mapstruct를 Bean에 등록하기 위한 코드

빌드하면 아래와 같은 경로에 아래의 코드가 자동으로 생성되는데 원래 의도대로라면
UserData = userData = new UserData()
아래에 .set과 .get을 이용해서 매핑하는 코드가 들어가야되는데 안들어감.
분명 getter와 setter를 사용하면 된다고 했는데 안됨.

build/generated/sources/annotationProcessor/java/main/com/example/blog/api/user/UserDTOMapperImpl.java

Reference


https://mangchhe.github.io/spring/2021/01/25/ModelMapperAndMapStruct/
https://projectlombok.org/changelog
https://mapstruct.org/documentation/stable/reference/html/#lombok

profile
공부합시다

0개의 댓글