From 3161a827bd474dea7e5901f66dcc357c90fa1af1 Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Sat, 13 Jul 2024 17:32:26 +0900 Subject: [PATCH] =?UTF-8?q?[FIX]=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85/?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=9C=20=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20validation=20=EC=B6=94=EA=B0=80=20#25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 ++ .../auth/controller/AuthController.java | 3 ++- .../domain/auth/dto/MemberCreateRequest.java | 20 ++++++++++++---- .../exception/ValidationExceptionHandler.java | 23 +++++++++++++++++++ 4 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 src/main/java/sopt/univoice/infra/common/exception/ValidationExceptionHandler.java diff --git a/build.gradle b/build.gradle index 04b66f4..52848d1 100644 --- a/build.gradle +++ b/build.gradle @@ -59,6 +59,8 @@ dependencies { annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + + implementation 'org.springframework.boot:spring-boot-starter-validation' // 유효성 검사 위해 } tasks.named('test') { diff --git a/src/main/java/sopt/univoice/domain/auth/controller/AuthController.java b/src/main/java/sopt/univoice/domain/auth/controller/AuthController.java index 3bf15d2..9b73292 100644 --- a/src/main/java/sopt/univoice/domain/auth/controller/AuthController.java +++ b/src/main/java/sopt/univoice/domain/auth/controller/AuthController.java @@ -1,6 +1,7 @@ package sopt.univoice.domain.auth.controller; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -50,7 +51,7 @@ public ResponseEntity signIn(@RequestBody MemberSignInRequest } @PostMapping("/signup") - public ResponseEntity> signUp(@ModelAttribute MemberCreateRequest memberCreateRequest) { + public ResponseEntity> signUp(@Valid @ModelAttribute MemberCreateRequest memberCreateRequest) { System.out.println(memberCreateRequest.toString()); diff --git a/src/main/java/sopt/univoice/domain/auth/dto/MemberCreateRequest.java b/src/main/java/sopt/univoice/domain/auth/dto/MemberCreateRequest.java index 8cc6a91..93c5b2e 100644 --- a/src/main/java/sopt/univoice/domain/auth/dto/MemberCreateRequest.java +++ b/src/main/java/sopt/univoice/domain/auth/dto/MemberCreateRequest.java @@ -1,6 +1,10 @@ package sopt.univoice.domain.auth.dto; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; import lombok.*; import org.springframework.web.multipart.MultipartFile; @Setter @@ -10,23 +14,31 @@ @ToString public class MemberCreateRequest{ + @NotNull private Long admissionNumber; + @NotEmpty private String name; + @NotEmpty private String studentNumber; + @NotEmpty + @Size(min = 5, max = 20) + @Pattern(regexp = "^(?=.*[a-z])(?=.*\\d)(?=.*[!@#$%^&*])[A-Za-z\\d!@#$%^&*]{5,20}$", message = "영문 소문자, 숫자, 특수문자 사용 5~20자 여야 합니다.") private String email; + @NotEmpty + @Size(min = 8, max = 16) + @Pattern(regexp = "^(?=.*[a-z])(?=.*\\d)(?=.*[!@#$%^&*])[A-Za-z\\d!@#$%^&*]{8,16}$", message = "영문 소문자, 숫자, 특수문자 각각 1개 이상 포함 8~16자 여야 합니다.") private String password; + @NotNull MultipartFile studentCardImage; + @NotEmpty private String universityName; + @NotEmpty private String departmentName; - - - - } diff --git a/src/main/java/sopt/univoice/infra/common/exception/ValidationExceptionHandler.java b/src/main/java/sopt/univoice/infra/common/exception/ValidationExceptionHandler.java new file mode 100644 index 0000000..356d8c2 --- /dev/null +++ b/src/main/java/sopt/univoice/infra/common/exception/ValidationExceptionHandler.java @@ -0,0 +1,23 @@ +package sopt.univoice.infra.common.exception; + +import org.springframework.http.HttpStatus; +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; + +import java.util.HashMap; +import java.util.Map; + +@RestControllerAdvice +public class ValidationExceptionHandler { + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity> handleValidationExceptions(MethodArgumentNotValidException ex) { + Map errors = new HashMap<>(); + ex.getBindingResult().getFieldErrors().forEach(error -> + errors.put(error.getField(), error.getDefaultMessage()) + ); + return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); + } +}