From e6e6e8dc9ee50e02a31b955e2cdc55e6655fd321 Mon Sep 17 00:00:00 2001 From: Seoyoung Date: Tue, 8 Jul 2025 01:21:06 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=EA=B0=9C=EC=9D=B8=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EC=8B=9C=20=EA=B0=81=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20Nullable=20=EC=B2=B4=ED=81=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/service/MemberServiceImpl.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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); From dd90a1a60bbcc1c3179fa517c4b26e1142d47541 Mon Sep 17 00:00:00 2001 From: Seoyoung Date: Tue, 8 Jul 2025 01:23:12 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20Valid=20Exception=20Handler=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/GlobalExceptionHandler.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) 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); From 9f93fea49c324804444cf25686f5c4ceeae33847 Mon Sep 17 00:00:00 2001 From: Seoyoung Date: Tue, 8 Jul 2025 01:23:40 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EC=9E=91=EB=8F=99=ED=95=98=EC=A7=80?= =?UTF-8?q?=20=EC=95=8A=EB=8A=94=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80?= =?UTF-8?q?=EC=82=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ikdaman/domain/member/controller/MemberController.java | 3 ++- src/main/java/com/ikdaman/domain/member/model/MemberReq.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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")