대충 넘어가지 않는 습관을 위한 기록

@Mapping 활용법 - boolean

uhyvn 2024. 6. 1. 15:12
@Mapper(
    componentModel = "spring",
    injectionStrategy = InjectionStrategy.CONSTRUCTOR,
    unmappedTargetPolicy = ReportingPolicy.ERROR
)
public interface QnaMapper {

    WriteQnaCommand of(WriteQnaRequest request);

}

 

 

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class WriteQnaRequest {

    @NotBlank(message = "카테고리가 누락되었습니다.")
    private String categoryCode;

    @Size(max = 50, message = "제목은 최대 50글자만 작성 가능합니다.")
    @NotBlank(message = "제목이 누락되었습니다.")
    private String title;

    @NotBlank(message = "내용이 누락되었습니다.")
    private String content;

    @NotNull(message = "비밀글 여부가 누락되었습니다.")
    private boolean isPrivate;

}

 

 

 

게시판 글 작성하는 부분이다.

우리는 비밀글인지 아닌지 표시를 해줘야 하는 상황이며,

코드 컨벤션을 따라 is를 붙여줘야 하는 상황이었다.

 

 

그러나 위와 같이 코드를 작성하고 빌드를 하게 되면,

error: Unmapped target property: "isPrivate".
    WriteQnaCommand of(WriteQnaRequest request);
                                      ^

 

이런 에러가 뜨게 된다.

일단 에러가 난 이유는,

Spring Boot에서 Dto로 Response를 반환 시 primitive boolean type의 변수의 변수명이 is~로 시작하면 is가 자동으로 생략되기 때문이다.

 

 

이를 해결하기 위해서 @Mapping으로 타겟을 is가 빠진 상태로 명확히 지정해줘야 한다.

 

 

@Mapper(
    componentModel = "spring",
    injectionStrategy = InjectionStrategy.CONSTRUCTOR,
    unmappedTargetPolicy = ReportingPolicy.ERROR
)
public interface QnaMapper {

    @Mapping(target = "isPrivate", source = "private")
    WriteQnaCommand of(WriteQnaRequest request);

}

 

 

해결!