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
https://mangchhe.github.io/spring/2021/01/25/ModelMapperAndMapStruct/
https://projectlombok.org/changelog
https://mapstruct.org/documentation/stable/reference/html/#lombok