패스트캠퍼스 챌린지 7일차
1. 데이터 벨리데이션의 적용
dmaker.controller.DMakerController
@Slf4j
@RestController
@RequiredArgsContstructor
public class DMakerController {
@GetMapping("/developers")
public List<String> getAllDeveleopers() {
// GET /developers HTTP/1.1
log.info("GET /developers HTTP/1.1");
return Arrays.asList("Harry", "Paul", "Ashe");
}
// 주로 DB 데이터 삽입 요청시에는 'POST' 메서드를 많이 쓰기 때문에
// Get이 아니라 PostMapping으로 바꿔준다.
// @GetMapping("/create-developer")
@PostMapping("/create-developer")
public List<String> createDeveleoper() {
// GET /create-developer HTTP/1.1
log.info("GET /create-developer HTTP/1.1");
dMakerService.createDeveloper();
return Collections.singletonList("Harry");
}
}
DMakerController에서 createDeveloper 메서드에 대한 mapping 어노테이션 정의를 다시 해준다.
보통 Insert는 Post 메서드를 거쳐 요청을 전송하기 때문이다. 다음으로 개발자 생성 요청에 대한 dto를 만들어준다.
dmaker.dto.CreateDeveloper
// 개발자 생성을 위한 dto를 만들어준다.
public class CreateDeveloper {
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
// log를 위한 추가
@ToString
public static class Request {
// 생성 요청 시에 필요한 파라미터를 정의한다.
// 각각의 파라미터에 대한 유효성 검사를 어노테이션으로 추가해준다.
@NotNull
private DeveloperLevel developerLevel;
@NotNull
private DeveloperSkillType developerSkillType;
@NotNull
@Min(0)
@Max(20)
private Integer experienceYears;
@NotNull
@Size(min = 3, max = 50, message = "memberId size must be 3 - 50")
private String memberId;
@NotNull
@Size(min = 3, max = 20, message = "memberId size must be 3 - 20")
private String name;
@Min(18)
private Integer age;
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public static class Response {
// 개발자 생성에 대한 응답으로 이름과 나이를 제외하고 (개인정보 제외) 보내준다.
private DeveloperLevel developerLevel;
private DeveloperSkillType developerSkillType;
private Integer experienceYears;
private String memberId;
}
}
dto를 만들 때는 request와 response에 대한 정의를 모두 해준다.
요청 시에 필요한 파라미터를 정의해주고 파라미터에 필요한 validation을 어노테이션을 통해 추가해준다.
dmaker.Controller.DMakerController
@Slf4j
@RestController
@RequiredArgsContstructor
public class DMakerController {
@GetMapping("/developers")
public List<String> getAllDeveleopers() {
// GET /developers HTTP/1.1
log.info("GET /developers HTTP/1.1");
return Arrays.asList("Harry", "Paul", "Ashe");
}
// 주로 DB 데이터 삽입 요청시에는 'POST' 메서드를 많이 쓰기 때문에
// Get이 아니라 PostMapping으로 바꿔준다.
// @GetMapping("/create-developer")
@PostMapping("/create-developer")
public List<String> createDeveleoper
// RequestBody를 request 변수에 담아준다.
// @Valid 어노테이션을 붙여 validation이 작동할 수 있게끔 한다.
(
@Valid @RequestBody CreateDeveloper.Request request
) {
// GET /create-developer HTTP/1.1
log.info("request : {" + request + "}");
dMakerService.createDeveloper(request);
return Collections.singletonList("Harry");
}
}
dto를 추가하고 DMakerController의 createDeveloper 메서드의 매개 변수에 생성한 CreateDeveloper.Request를 넘겨준다.
CreateDeveloper.Request에는 validation을 위한 @Valid 어노테이션과 request body를 담겠다는 @RequestBody 어노테이션을 붙여준다.
dmaker.service.DMakerService
@Service
@RequiredArgsConstructor
public class DMakerService {
private final DeveloperRepository developerRepository;
@Transactional
// 매개변수에 dto의 CreateDeveloper.Request를 추가해준다.
public void createDeveloper(CreateDevloper.Request request){
// Builder를 통해 각각의 데이터들을 삽입해준다.
Developer developer = Developer.builder()
.developerLevel(DeveloperLevel.JUNIOR)
.developerSkillType(DeveloperSkillType.FRONT_END)
.experienceYears(2)
.name("Harry")
.age(31)
.build();
// 작성된 developer 객체를 developerRepository를 통해 DB에 저장한다.
developerRepository.save(developer);
}
}
DMakerService의 매개변수에 dto에서 생성한 CreateDeveloper의 Request를 넣어준다.
본 포스팅은 패스트 캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
https://bit.ly/3FVdhDa
수강료 100% 환급 챌린지 | 패스트캠퍼스
딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!
fastcampus.co.kr