diff --git a/src/main/java/com/ikdaman/domain/member/controller/MemberController.java b/src/main/java/com/ikdaman/domain/member/controller/MemberController.java index 058e9de..03fb267 100644 --- a/src/main/java/com/ikdaman/domain/member/controller/MemberController.java +++ b/src/main/java/com/ikdaman/domain/member/controller/MemberController.java @@ -5,6 +5,7 @@ import com.ikdaman.domain.member.model.MemberRes; import com.ikdaman.domain.member.service.MemberService; import com.ikdaman.global.auth.model.AuthMember; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -51,7 +52,7 @@ public ResponseEntity findMyInfo(@AuthenticationPrincipal AuthMember authMember) // 내 정보 수정 @PutMapping("/me") public ResponseEntity editMyInfo(@AuthenticationPrincipal AuthMember authMember, - @RequestBody MemberReq memberReq) { + @RequestBody @Valid MemberReq memberReq) { MemberRes result = memberService.editMember(authMember.getMember().getMemberId(), memberReq); return ResponseEntity.ok(result); } diff --git a/src/main/java/com/ikdaman/domain/member/model/MemberReq.java b/src/main/java/com/ikdaman/domain/member/model/MemberReq.java index 54609aa..c161ffc 100644 --- a/src/main/java/com/ikdaman/domain/member/model/MemberReq.java +++ b/src/main/java/com/ikdaman/domain/member/model/MemberReq.java @@ -23,7 +23,7 @@ public class MemberReq { @NotBlank @Size(min=2, max=15, message = "닉네임은 최소 2자, 최대 15자만 가능합니다.") - @Pattern(regexp = "^[a-zA-Z0-9가-힣\\\\s]+$", message = "닉네임은 한글, 영어, 숫자, 공백만을 포함합니다.") + @Pattern(regexp = "^[a-zA-Z0-9가-힣\\s]+$", message = "닉네임은 한글, 영어, 숫자, 공백만을 포함합니다.") private String nickname; private Member.Gender gender; @DateTimeFormat(pattern = "yyyy-MM-dd") diff --git a/src/main/java/com/ikdaman/domain/member/service/MemberServiceImpl.java b/src/main/java/com/ikdaman/domain/member/service/MemberServiceImpl.java index 3f441fe..0e59adc 100644 --- a/src/main/java/com/ikdaman/domain/member/service/MemberServiceImpl.java +++ b/src/main/java/com/ikdaman/domain/member/service/MemberServiceImpl.java @@ -68,13 +68,17 @@ public MemberRes editMember(UUID memberId, MemberReq memberReq) { Member member = memberRepository.findById(memberId) .orElseThrow(() -> new BaseException(ErrorCode.NOT_FOUND_USER)); - if(!memberReq.getNickname().equals(member.getNickname()) && !isAvailableNickname(memberReq.getNickname())) { + if( + memberReq.getNickname() != null + && !memberReq.getNickname().equals(member.getNickname()) + && !isAvailableNickname(memberReq.getNickname()) + ) { throw new BaseException(ErrorCode.CONFLICT_NICKNAME); } - member.updateNickname(memberReq.getNickname()); - member.updateBirthdate(memberReq.getBirthdate()); - member.updateGender(memberReq.getGender()); + member.updateNickname(Optional.ofNullable(memberReq.getNickname()).orElse(member.getNickname())); + member.updateBirthdate(Optional.ofNullable(memberReq.getBirthdate()).orElse(member.getBirthdate())); + member.updateGender(Optional.ofNullable(memberReq.getGender()).orElse(member.getGender())); memberRepository.save(member); diff --git a/src/main/java/com/ikdaman/global/exception/GlobalExceptionHandler.java b/src/main/java/com/ikdaman/global/exception/GlobalExceptionHandler.java index 089c20e..408394c 100644 --- a/src/main/java/com/ikdaman/global/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/ikdaman/global/exception/GlobalExceptionHandler.java @@ -6,6 +6,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -85,7 +86,25 @@ public ResponseEntity handleException(ConstraintViolationException ex) ErrorRes errorRes = ErrorRes.builder() .status(BAD_REQUEST_BY_VALIDATION.getStatus()) .code(String.valueOf(BAD_REQUEST_BY_VALIDATION.getCode())) - .message(ex.getMessage()) + .message(ex.getMessage().split(": ")[1]) + .build(); + + return new ResponseEntity<>(errorRes, HttpStatus.BAD_REQUEST); + } + + /** + * Valid 관련 예외(MethodArgumentNotValidException) 처리 핸들러 + * + * @param ex MethodArgumentNotValidException + * @return 에러 응답(ResponseEntity) + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity handleException(MethodArgumentNotValidException ex) { + log.error(ex.getMessage(), ex); + ErrorRes errorRes = ErrorRes.builder() + .status(BAD_REQUEST_BY_VALIDATION.getStatus()) + .code(String.valueOf(BAD_REQUEST_BY_VALIDATION.getCode())) + .message(ex.getBindingResult().getFieldError().getDefaultMessage()) .build(); return new ResponseEntity<>(errorRes, HttpStatus.BAD_REQUEST);