@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);
}
해결!
'대충 넘어가지 않는 습관을 위한 기록' 카테고리의 다른 글
GitHub Actions 워크플로우 이벤트 수동 전환 (0) | 2024.07.18 |
---|---|
FeignClient를 이용한 소셜 로그인 (카카오, 구글) (0) | 2024.07.11 |
Querydsl - DTO 반환 (1) | 2024.05.02 |
JPA 기록 - 지연 로딩과 조회 성능 최적화 (1) | 2024.04.23 |
JPA 기록 - 객체지향 쿼리 언어 JPQL (1) | 2024.04.20 |