데이터가 정해진 조건이나 규칙에 맞는지 확인하는 작업
ex) 데이터 형식, null 여부, 예상 범위 내에 있는 지 등...
// build.gradle
implementation 'org.springframework.boot:spring-boot-starter-validation'
=> 다시 build 필요!
@PostMapping("/join/api/result") // After
public ApiUtils.ApiResult<String> joinByApiResult(@Valid @RequestBody MemberDTO memberDTO) {
log.info(memberDTO.toString());
if(isDuplicateId(memberDTO))
return error("아이디 중복", HttpStatus.CONFLICT);
Member requestMember = memberDTO.converToEntity();
String userId = memberService.join(requestMember);
return success(userId);
}
@Getter
@Setter
public class MemberDTO {
@JsonProperty("user_id")
@NotNull(message = "아이디는 필수로 입력되어야 합니다.")
private String userId;
@NotBlank(message = "비밀번호에 공백은 포함될 수 없습니다.")
@Min(value = 8, message = "비밀번호는 8자리 이상이어야 합니다.")
private String pw;
@NotNull(message = "이름은 필수로 입력되어야 합니다.")
private String name;
@Email(message = "이메일 형식이 맞지 않습니다.")
private String email;
@Pattern(regexp = "^010-(\\d{4})-(\\d{4})$", message = "전화번호 형식이 맞지 않습니다.")
private String contact;
public Member converToEntity(){
return new Member(userId, pw, name, email, contact);
}
}
유효성 검사에서 실패했다면, Errors 객체를 통해 유효성 검사 오류에 대한 정보를 전달한다
@PostMapping(value = "/join/api/result")
public ApiResult joinByApiResult(@Valid @RequestBody UserDTO userDto, Errors errors) {
if (errors.hasErrors()) {
List<FieldError> list = errors.getFieldErrors();
String message = "";
for (FieldError error : list) {
message += error.getDefaultMessage() + " ";
}
return error(message, HttpStatus.BAD_REQUEST);
}
}