개발/Spring
[3] DTO 설정
민지기il
2025. 3. 4. 18:01
동적 커리를 위해 필요한 Data를 DTO로 받는다.
[1] DTO 설정
@Data // getter, setter 모두 만든다
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TodoDTO {
private Long tno;
private String title;
private String content;
private boolean complete;
private LocalDate dueDate;
}
[2] TodoService
@Transactional
public interface TodoService {
TodoDTO get(Long tno);
default TodoDTO entityDTO(Todo todo) { //1. Todo라는 엔티티를 DTO로 만든다.
TodoDTO todoDTO =
TodoDTO.builder()
.tno(todo.getTno())
.title(todo.getTitle())
.content(todo.getContent())
.dueDate(todo.getDueDate())
.build();
return todoDTO;
}
default Todo dtoToEntity(TodoDTO todoDTO){ //2. DTO를 Todo라는 엔티티로 만든다.
return Todo.builder()
.tno(todoDTO.getTno())
.title(todoDTO.getTitle())
.content(todoDTO.getContent())
.dueDate(todoDTO.getDueDate())
.build();
}
}
[3] TodoServiceImpl -- 실제 객체
@Service
@Log4j2
@RequiredArgsConstructor
public class TodoServiceImpl implements TodoService{
private final TodoRepository todoRepository;
@Override
public TodoDTO get(Long tno){
Optional<Todo> result = todoRepository.findById(tno);
Todo todo = result.orElseThrow();
return entityDTO(todo);
}
}
@Transactional: Method, Interface, Class에 선언 가능
[4] Test 해보기
@SpringBootTest
@Log4j2
public class TodoServiceTests {
@Autowired
TodoService todoService;
@Test
public void testGet(){
Long tno = 1L;
log.info(todoService.get(tno));
}
}
정상적으로 DTO가 생성된 걸 알 수 있다.