DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체(Java Beans)이다.
DTO는 클라이언트 요청에 포함된 데이터를 담아 서버 측에 전달하고, 서버 측의 응답 데이터를 담아 클라이언트에 전달하는 계층간 전달자 역할을 한다.
출처 : https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/
package com.fastcampus.programming.dmaker.dto;
import com.fastcampus.programming.dmaker.entity.Developer;
import com.fastcampus.programming.dmaker.type.DeveloperLevel;
import com.fastcampus.programming.dmaker.type.DeveloperSkillType;
import lombok.*;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class DeveloperDto {
private DeveloperLevel developerLevel;
private DeveloperSkillType developerSkillType;
private String memberId;
//Developer -> DeveloperDto
public static DeveloperDto fromEntity(Developer developer){
return DeveloperDto.builder()
.developerLevel(developer.getDeveloperLevel())
.developerSkillType(developer.getDeveloperSkillType())
.memberId(developer.getMemberId())
.build();
}
}
public List<DeveloperDto> getAllDevelopers() {
return developerRepository.findAll()
.stream().map(DeveloperDto::fromEntity)
.collect(Collectors.toList());
@GetMapping("/developers/{memberId}")
public DeveloperDetailDto getDeveloperDetail(@PathVariable String memberId){
// GET /developers HTTP/1.1
log.info("GET /developers HTTP/1.1");
return dMakerService.getDeveloperDetail(memberId);
}
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeveloperDetailDto {
private DeveloperLevel developerLevel;
private DeveloperSkillType developerSkillType;
private Integer experienceYears;
private String memberId;
private String name;
private Integer age;
public static DeveloperDetailDto fromEntity(Developer developer){
return DeveloperDetailDto.builder()
.developerLevel(developer.getDeveloperLevel())
.developerSkillType(developer.getDeveloperSkillType())
.experienceYears(developer.getExperienceYears())
.memberId(developer.getMemberId())
.name(developer.getName())
.age(developer.getAge())
.build();
}
}
public DeveloperDetailDto getDeveloperDetail(String memberId) {
return developerRepository.findByMemberId(memberId)
.map(DeveloperDetailDto::fromEntity)
.orElseThrow(()-> new DMakerException(NO_DEVELOPER));
}
<Optional>
이기 때문에 orElseThrow를 이용해서 값이 없을 때 Exception으로 NO_DEVELOPER을 던진다.