값이 있는지 (null), 형식이 올바른지 (email, ...) 등 검사
검증에 오류가 있다면 MethodArgumentNotValidException 발생
-> 400 Bad Request
build.gradle에 dependencies 추가하여 사용한다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
더 많은 제약조건 Annotation을 보고 싶다면
자바 공식 문서를 참고해보쟈~
Sping Boot로 쇼핑몰 백엔드를 쪼~끔 맛보고 있는데
회원가입에서 Validation을 구현해보았다.
@Getter
@Setter
public class UserDTO {
@JsonProperty("user_id")
@NotBlank(message = "아이디는 필수 입력 값입니다.")
private String userId;
@NotBlank(message = "비밀번호는 필수 입력 값입니다.")
private String pw;
@Pattern(regexp = "^[ㄱ-ㅎ가-힣a-z0-9-_]{2,10}$", message = "닉네임은 특수문자를 제외한 2~10자리여야 합니다.")
@NotBlank
private String name;
@Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}$", message = "이메일 형식이 올바르지 않습니다.")
@NotBlank(message = "이메일은 필수 입력 값입니다.")
private String email;
@NotBlank(message = "연락처는 필수 입력 값입니다.")
private String contact;
public User convertToEntity() {
return new User(userId, pw, name, email, contact);
}
}
DTO를 생성해서 RequestBody로 값을 받아온 다음,
Controller에 회원가입 메소드 생성자에서 Entity로 바꾸어주었다.
@PostMapping("/join/api/result")
public ApiUtils.ApiResult<String> joinByApiResult(
@Valid @RequestBody UserDTO userDTO, Errors errors){
if (errors.hasErrors()) {
return error("Validation Error", HttpStatus.BAD_REQUEST);
}
if (isDuplicateId(userDTO))
return error("아이디 중복", HttpStatus.CONFLICT);
User requestUser = userDTO.convertToEntity();
String userId = userService.join(requestUser);
return success(userId);
}
@Valid를 사용해서 유효성 검사를 해주었다.
만약 error가 발생한다면,
Bad_Request를 return 해주도록 했다.