본문 바로가기

Spring

[Spring] ModelMapper Entity to DTO 변환 시 프로퍼티 null 해결

728x90
반응형

들어가며

API의 Response로 전달될 Object를 만들면서 EntityDTO로 변환해야하는 경우가 생겼다. 여느 때처럼 DTO클래스에 Mapper로 매핑작업을 하는 of() 메서드를 만들었는데 json 응답 값이 null 파티였다. (😂NULL🎉....)

왜 나는 modelMapper, objectMapper, Jackson의 늪은 벗어날 수 없는걸까.. 거의 매일 찾아보는데 다음 날 되면 다시 리셋되는 나의 머릿 속,,😫

또 같은 실수를 반복하지 않기 위해 울면서작성해본다 광광..흑흑..

문제 상황

Account 엔티티 객체 -> AccountResDto 응답용 객체 로 변환하고자 of 메서드를 제작하였다.

@Getter
public class AccountResDto {

    private static final String DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";

    private Long id;

    private String email;

    private String nickname;

    private boolean emailVerified;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_PATTERN, timezone = "Asia/Seoul")
    private LocalDateTime createdDate;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_PATTERN, timezone = "Asia/Seoul")
    private LocalDateTime updatedDate;

    public static AccountResDto of(Account account) {
        return ModelMapperUtils.getModelMapper().map(account, AccountResDto.class);
    }

}

디버깅 하여 살펴보았는데 ModelMapperUtils.getModelMapper().map(account, AccountResDto.class); 의 결과로 리턴되는 DTO 객체의 프로퍼티들이 다 null(or false)로 찍혀있었다.

JSON 응답 값 (null 파티~)

해결

매핑 과정에서 Setter가 필요한가? 해서 @Setter 어노테이션을 추가해주었다.

결과는 정상 동작 !

JSON 응답 값 (원하는 값 😍)

원인 분석

자주 들어갔던 블로그 포스팅에서

"ModelMapper는 해당 클래스의 기본 생성자를 이용해 객체를 생성하고 setter를 이용해 매핑을 한다."

라는 문장을 확인하였다. 이 내용을 레퍼런스에서 확인하셨다고 했는데 역시 레퍼런스에 답이있었다...

 

참고

Entity to DTO, DTO to Entity 그리고 ModelMapper (http://dbbymoon.tistory.com/4)

728x90
반응형