반응형
❗문제 상황
Mapper 테스트 중 isAgree 필드가 매핑이 안되는 문제가 있었다.
그래서 구현체를 보니 이렇게 false로 초기화 되고 다른 필드들은 getter로 값을 가져와서 대입하는데
isAgree는 그대로 false로 초기화된 값으로 생성자를 생성했다..!
이유를 찾아보니 MapStruct가 isAgree 값을 무시하고, 항상 false로 넣는 이유는
Java에서 Kotlin의 isAgree에 대해 getter 메서드를 getIsAgree()로 찾으려고 하는데, Kotlin은 Java에서 isAgree()라는 메서드 이름을 생성하기 때문에
MapStruct가 getter를 찾지 못해서 값을 무시하는 것이라고 했다.
접미사가 is면 다 같은 현상이 발생한다...
🚀 해결 방법
gpt가 추천해준 해결 방법은 3가지가 있었다.
방법 1. @Mapping으로 명시적 매핑
@Mapping 방법은 똑같이 isAgree를 못찾아서 pass..
@Mapping(source = "isAgree", target = "isAgree")
방법 2. @ValueMapping
번거롭고 이상한 방법이라 시도조차 x..
data class CreateReq(
@get:JvmName("getIsAgree") val isAgree: Boolean
)
방법 3. DTO를 Java 클래스로 바꾸기
이것도 마찬가지로 번거롭고 유지보수하기 힘들어서 pass
추천해준 방식 모두 맘에 안들어서
제가 선택한 방법은 그냥 필드 이름을 바꿔버리기
최종 선택
isAgree -> hasAgreed로 바꿔서 해결!..
완벽한 해결 방법은 아니라 찝찝하지만 회피하는식으로 해결 했습니다
반응형
'Spring' 카테고리의 다른 글
[Spring] JDK Dynamic Proxy와 CGLib에 대해서 알아보자. (0) | 2025.06.16 |
---|---|
[Kotlin] 코틀린에서 @Value 사용하는 방법 (0) | 2025.06.16 |