입력값에 대한 검증을 진행할 수 있다.
<예시>
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
private String username;
@NotBlank
private String password;
@Pattern(regexp = "^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$")
@NotBlank
private String email;
private boolean admin = false;
private String adminToken = "";
}
어노테이션 설명
@Null
:null만 허용한다.
@NotNull
:빈 문자열(""), 공백(" ")은 허용하되, Null은 허용하지 않음
@NotEmpty
:공백(" ")은 허용하되, Null과 빈 문자열("")은 허용하지 않음
@NotBlank
:null, 빈 문자열(""), 공백(" ") 모두 허용하지 않는다.
@Email
:이메일 형식을 검사한다. 단, 빈 문자열("")의 경우엔 통과 시킨다. ( @Pattern을 통한 정규식 검사를 더 많이 사용
@Pattern(regexp = )
:정규식 검사할 때 사용한다.
@Size(min=, max=)
:길이를 제한할 때 사용한다.
@Max(value = )
:value 이하의 값만 허용한다.
@Min(value = )
:value 이상의 값만 허용한다.
@Positive
:값을 양수로 제한한다.
@PositiveOrZero
:값을 양수와 0만 가능하도록 제한한다.
@Negative
:값을 음수로 제한한다.
@NegativeOrZero
:값을 음수와 0만 가능하도록 제한한다.
@Future
:Now 보다 미래의 날짜, 시간이어야 한다.
@FutureOrPresent
:Now 거나 미래의 날짜, 시간이어야 한다.
@Past
:Now 보다 과거의 날짜, 시간이어야 한다.
@PastFutureOrPresent
:Now 거나 과거의 날짜, 시간이어야 한다
// build.gradle > dependencies
implementation 'org.springframework.boot:spring-boot-starter-validation'
// Ctroller
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto) { // @Valid 어노테이션을 붙여준다.
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
// Validation 예외처리
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
if(fieldErrors.size() > 0) {
for (FieldError fieldError : bindingResult.getFieldErrors()) {
log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
}
return "redirect:/api/user/signup";
}
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
bindingResult.getFieldErrors()
: 발생한 오류들에 대한 정보가 담긴 List<FieldError>
리스트를 가져온다.
정규표현식은 일정한 규칙을 가진 문자열을 필터링 하거나, 치환할 수 있다.
프로그래밍 뿐만이 아닌 간단한 문서 작업등에서 아주 유용하게 사용할 수 있기 때문에
간단한 치환이나 필터 등은 자주 사용해왔었다.
<Spring 이메일 형식 검증 예제>
// RequestDto
@Pattern(regexp = "^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$")
@NotBlank
private String email;