JAVA/Spring

패스트캠퍼스 챌린지 7일차

발싸믹쏘스 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