DTO -> VO 변환 시 null값을 반환하는 에러

라이라·2023년 6월 22일
0
public interface TodoService {
    void register(TodoDTO dto);
}

dto 데이터를 받아 실행하는 인터페이스를 만들고

public class TodoServiceImpl implements TodoService{
    private final TodoMapper todoMapper;
    private final ModelMapper modelMapper;

    @Override
    public void register(TodoDTO dto){
        log.info(dto);
        TodoVO vo = modelMapper.map(dto, TodoVO.class);
        log.info(vo);
        todoMapper.insert(vo);
    }
}

impl클래스에서 그걸 구현하는데 dto 데이터를 받아오는데는 문제가 없었지만 vo.class로 변환하는 테스트케이스에서 에러가 발생했다.

@Autowired
    private TodoService service;

    @Test
    public void todoReg(){
        TodoDTO dto = TodoDTO.builder()
                .title("hello")
                .localDate(LocalDate.now())
                .writer("hello")
                .build();
        log.info(dto);
        service.register(dto);
    }

log로 찍어봤을 때 dto 데이터를 받아오는 것은 문제가 없었지만 vo로 변환 시 모든 값이 null 값이 되어버려 sql에서 not null로 선언해 둔 title 등에서 값을 받지 못해 에러가 발생한 것이었다.

실제로 dto->vo로 변환하지 않고 다이렉트로 vo로 선언 해 regist하자 문제없이 mysql에 데이터가 등록이 되었기에 변환과정에서 문제가 있다고 판단했다.

@Getter
@Setter
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class TodoVO {
    private Long tno;
    private String title;
    private LocalDate localDate;
    private boolean finished;
    private String writer;
}

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

라는 레퍼런스를 발견했고 VO선언에 있어서 @Setter를 추가하자 바로 해결되었다.

profile
혼자 보려고 올리는 용도

0개의 댓글