ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 패스트캠퍼스 챌린지 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

     

    수강료 100% 환급 챌린지 | 패스트캠퍼스

    딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

    fastcampus.co.kr

    '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

    댓글

Designed by Tistory.