- 23.12.12) TIL2023년 12월 12일 20시 05분 12초에 업로드 된 글입니다.작성자: oneseel
1. controller
// 회원가입 @PostMapping("/signup") public ResponseEntity<?> signup(@Valid @RequestBody UserRequestDto requestDto) { try { userService.signup(requestDto); return ResponseEntity.status(HttpStatus.CREATED.value()) .body(new CommonResponseDto("회원가입 성공", HttpStatus.CREATED.value())); } catch (BusinessException be) { return ResponseEntity.status(be.getStatus()) .body(new CommonResponseDto(be.getMessage(), be.getStatus())); } }
2. Service
- 비밀번호와 비밀번호 확인 불일치할 경우, 비밀번호에 닉네임과 같은 값이 포함된 경우, 유저네임이 중복된 경우를 예외처리했다.
@Transactional public void signup(UserRequestDto requestDto) { String username = requestDto.getUsername(); String password = requestDto.getPassword(); String checkPassword = requestDto.getCheckPassword(); // 비밀번호와 비밀번호 확인이 일치하지 않는 경우 if (!Objects.equals(password, checkPassword)) { throw new PasswordMismatchException(); } // 비밀번호에 닉네임과 같은 값이 포함된 경우 if (username.contains(password)) { throw new PasswordContainsUsernameException(); } String encodePassword = passwordEncoder.encode(password); // 유저의 중복유무 if (userRepository.findByUsername(username).isPresent()) { throw new AlreadyExistUserException(); } User user = new User(username, encodePassword); userRepository.save(user); } }
1) 회원가입 성공
2) 회원가입 실패 - 중복된 유저네임
3) 회원가입 실패 - 비밀번호와 비밀번호 확인 불일치
4) 회원가입 실패 - 비밀번호 값이 유저네임에 포함된 경우
3. Validation 예외처리
- 정해진 글자수보다 작거나 많으면 어떤 Response가 나올지 해봤는데 포스트맨에 원하는 msg가 나오지 않았다.
- 컨트롤러에 아래와 같은 코드를 입력하면 ExceptionHandler에서 validation에서 나오는 예외를 가지고 와서 JSON형태로 바꿔서 보낸다.
@ExceptionHandler({MethodArgumentNotValidException.class}) protected ResponseEntity handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { return new ResponseEntity<>(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage() ,HttpStatus.BAD_REQUEST); }
- 모든 컨트롤러에 쓸 수 없으니 따로 클래스를 만들었다.
- @ControllerAdvice 어노테이션을 사용하면 모든 컨트롤러에 적용이 된다.
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ResponseEntity<String> handleValidationException(MethodArgumentNotValidException e) { return ResponseEntity.badRequest().body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage()); } }
'TIL' 카테고리의 다른 글
23.12.26) TIL (0) 2023.12.26 23.12.13) TIL (0) 2023.12.14 23.12.08) TIL (0) 2023.12.08 23.12.07) TIL (0) 2023.12.07 23.12.06) TIL (0) 2023.12.06 댓글