Lombok 의 @Builder 사용시, MapStruct 버그

MapStruct 를 사용하여 프로젝트를 진행하던 중, 이상한 버그를 발견하여 포스팅으로 해결 방법을 남긴다.


무슨 버그?

Lombok 에서 빌더패턴을 쉽게 적용할 수 있는 애너테이션을 제공한다.

@Builder , @SuperBuilder 를 통해, 특정 클래스에 빌더 패턴을 간편하게 적용할 수 있다.

이렇게 빌더 패턴을 적용한 클래스를 MapStruct의 target 으로 사용하면, 아래 버그가 발생한다.


MapStruct 의 @AfterMapping 이 적용되지 않는 문제


위 문제는 MapStruct 1.3 버전부터 발생된 것으로 보인다.

자세한 것은 아래를 참고하자.

해결방법

MapStruct 가 Lombok 으로 생성한 빌더를 사용하지 않도록 설정하면, 정상적으로 @AfterMapping 이 동작한다.

적용 방법은 아래와 같다.

@Mapper(builder = @Builder(disableBuilder = true)) //빌더패턴 비활성화
public interface MyMapper {
	//...

	@AfterMapping
	default void callAfterMapping(...) {
		//...
	}
}