어노테이션을 사용한 유효성 검사
@NotNull - 빈값인지 확인 , @Email - 이메일 형식이 맞는지 확인 @Pattern - 비밀번호 형식
컨트롤러에 @Valid 넣어주기!! (+dependencies 설정)
implementation 'org.springframework.boot:spring-boot-starter-validation'
package com.example.PDA_SHOPPINGMALL.Users;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class UserDTO {
@NotBlank(message ="아이디가 입력되지 않았습니다.")
String userId;
@NotBlank(message = "비밀번호가 입력되지 않았습니다.")
@Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$).{8,16}")
String password;
@NotBlank(message = "이름이 입력되지 않았습니다.")
String name;
@Email(message = "이메일 형식이 다릅니다")
String email;
@NotBlank(message = "연락처가 입력되지 않았습니다.")
String contact;
}
@PostMapping("/user/signup")
public ApiUtils.ApiResult signUp(@Valid @RequestBody UserDTO userDTO){
if(checkId(userDTO)){
return error("아이디 중복", HttpStatus.CONFLICT);
}
User requestUser = fromDtoToEntity(userDTO);
String userId = userService.signUp(requestUser);
log.info(userId);
return success(userId);
}

이렇게 error가 날라온다!
Bad Request가 날라왔을 때 error를 좀 더 구체화해보자
@PostMapping("/user/signup")
public ApiUtils.ApiResult signUp(@Valid @RequestBody UserDTO userDTO, Errors errors){
if(errors.hasErrors()){
String message = errors.getFieldError().getDefaultMessage();
return error(message, HttpStatus.BAD_REQUEST);
}
else{
/*if(checkId(userDTO)){
return error("아이디 중복", HttpStatus.CONFLICT);
}*/
User requestUser = fromDtoToEntity(userDTO);
String userId = userService.signUp(requestUser);
log.info(userId);
return success(userId);
}
}

메시지까지 포함하여 날라오는 걸 볼 수 있다
그렇다면
Validated와 Valid는 어떤 차이가 있을까?
- @Valid는 컨트롤러에서 직접적으로 유효성 검증 처리 @Validated는 빈으로 등록된 클래스에서 유효성 검증 처리
- @Valid는 검증 결과를 BindingResult에 담음 @Validated는 Errors에 담음
- @Valid는 검증 그룹을 사용할 수 없지만, @Validated는 검증 그룹 사용 가능
'프디아 백엔드' 카테고리의 다른 글
| @JsonNaming과 @JsonProperty (0) | 2024.05.13 |
|---|---|
| 로그 레벨이란 무엇인가 (0) | 2024.05.09 |
| [Gradle]build.gradle dependencies import keywords (0) | 2024.04.30 |
| 세 번째 페어프로그래밍 : 선택정렬 (0) | 2024.04.29 |
| HTTP Request & Response (0) | 2024.04.26 |