-
패스트캠퍼스 챌린지 7일차JAVA/Spring 2021. 11. 7. 23:57
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'JAVA > Spring' 카테고리의 다른 글
패스트캠퍼스 챌린지 9일차 (0) 2021.11.09 패스트캠퍼스 챌린지 8일차 (0) 2021.11.08 패스트캠퍼스 챌린지 6일차 (0) 2021.11.06 패스트캠퍼스 챌린지 5일차 (0) 2021.11.05 패스트캠퍼스 챌린지 4일차 (0) 2021.11.04