Junit Test Application-13-회원가입 컨트롤러 만들기

jaegeunsong97·2023년 8월 4일
0

Junit Bank Application 깃허브

Junit Bank Application 기록 노션

컨트롤러 작성

package shop.mtcoding.bank.web;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.RequiredArgsConstructor;
import shop.mtcoding.bank.dto.ResponseDto;
import shop.mtcoding.bank.dto.user.UserRequestDto.JoinRequestDto;
import shop.mtcoding.bank.dto.user.UserResponseDto.JoinResponseDto;
import shop.mtcoding.bank.service.UserService;

@RequiredArgsConstructor
@RequestMapping("/api")
@RestController
public class UserController {

     private final UserService userService;

     @PostMapping("/join")
     public ResponseEntity<?> join(@RequestBody JoinRequestDto joinRequestDto) { // 기본전략(x-www-form-urlencoded) -> JSON
          JoinResponseDto joinResponseDto = userService.회원가입(joinRequestDto);
          return new ResponseEntity<>(new ResponseDto<>(1, "회원가입 성공", joinResponseDto), HttpStatus.CREATED);
     }
}

스프링 부트 기본전략은 x-www-form-urlencoded 에서 JSON으로 바꾸기 (+ @ReuqestBody)

만약 비밀번호가 길어져도 들어감 따라서 제한을 걸어야한다. 유효성 검사 처리

public class UserRequestDto {

     @Getter
     @Setter
     public static class JoinRequestDto {

          @NotEmpty // null, empty 불가능
          private String username;
          @NotEmpty
          private String password;
          @NotEmpty
          private String email;
          @NotEmpty
          private String fullname;

          public User toEntity(BCryptPasswordEncoder passwordEncoder) {
               return User.builder()
                         .username(username)
                         .password(passwordEncoder.encode(password))
                         .email(email)
                         .fullname(fullname)
                         .role(UserEnum.CUSTOMER)
                         .build();
          }
     }
}

컨트롤러 수정

public class UserController {

     private final UserService userService;

     @PostMapping("/join")
     public ResponseEntity<?> join(@RequestBody @Valid JoinRequestDto joinRequestDto, BindingResult bindingResult) {
          if (bindingResult.hasErrors()) {
               Map<String, String> errorMap = new HashMap<>();

               for (FieldError error : bindingResult.getFieldErrors()) {
                    errorMap.put(error.getField(), error.getDefaultMessage());
               }
               return new ResponseEntity<>(new ResponseDto<>(1, "유효성 검사 실패", errorMap), HttpStatus.BAD_REQUEST);
          }

          JoinResponseDto joinResponseDto = userService.회원가입(joinRequestDto);
          return new ResponseEntity<>(new ResponseDto<>(1, "회원가입 성공", joinResponseDto), HttpStatus.CREATED);
     }
}

Dto에 @NotEmpty 의 어노테이션에서 에러가 발생하면 컨트롤러의 @Valid가 필요하고 발생한 에러는 bindingResult로 담아지게 된다.

아직은 AOP 처리하기 전 상태

profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글