입력 데이터의 유효성 검증을 담당하는 기능 으로, 사용자로부터 입력된 값이 특정 조건을 만족하는지 확인하는 역할을 한다. Spring Framework에서 제공하는 Validator는 주로 폼 데이터나 요청 데이터의 유효성을 검증할 때 사용된다.
Spring Validator의 주요 개념
- Spring에서는 Validator 인터페이스를 제공하여 사용자 정의 검증 로직을 구현할 수 있다.
- 이 인터페이스는 다음 두 가지 메서드를 포함한다.
- supports(Class<?> clazz): 해당 클래스가 이 Validator에서 검증 가능한지 여부를 결정
- validate(Object target, Errors errors): 검증 로직을 구현하는 메서드로, 실제 검증이 이 메서드에서 이루어진다. 검증이 실패하면 Errors 객체에 에러를 추가
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
public class UserValidator implements Validator {
// 지원하는 클래스인지 확인
@Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
}
// 유효성 검증 로직
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;
// 이름이 비어 있는지 확인
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required", "Name is required.");
// 나이가 18 이상인지 확인
if (user.getAge() < 18) {
errors.rejectValue("age", "invalid.age", "Age must be 18 or older.");
}
}
}
- 위 코드에서 UserValidator는 User 객체를 검증하고, 사용자가 입력한 이름이 비어 있거나 나이가 18세 미만일 때 오류를 발생시킨다.
- ValidationUtils 클래스 : Spring에서 제공하는 ValidationUtils는 자주 쓰이는 유효성 검사를 더 간편하게 도와주는 유틸리티. rejectIfEmptyOrWhitespace() 메서드는 필드가 비어 있거나 공백일 경우 오류를 등록하는 역할.
Validator검증 적용 방법
1. Controller에서 직접사용 : 컨트롤러에서 명시적으로 Validator를 호출하여 유효성을 검증할 수 있다.
@Controller
public class UserController {
private final UserValidator userValidator;
@Autowired
public UserController(UserValidator userValidator) {
this.userValidator = userValidator;
}
@PostMapping("/submit")
public String submitForm(@ModelAttribute User user, BindingResult result) {
userValidator.validate(user, result);
if (result.hasErrors()) {
return "formPage"; // 에러가 있으면 다시 폼 페이지로 이동
}
// 정상 처리
return "successPage";
}
}
2. Spring의 @Valid 어노테이션 사용 : Spring은 @Valid 또는 @Validated 어노테이션을 사용하여 유효성 검사를 자동으로 수행할 수 있습니다. 이 경우 JSR-303/JSR-380 Bean Validation API를 사용하여 더욱 간결하게 처리할 수 있다.
import javax.validation.Valid;
@PostMapping("/submit")
public String submitForm(@Valid @ModelAttribute User user, BindingResult result) {
if (result.hasErrors()) {
return "formPage";
}
return "successPage";
}
JSR-303/JSR-380 Bean Validation
Spring에서는 JSR-303/JSR-380 Bean Validation을 사용하여 어노테이션 기반의 검증도 가능하다. 예를 들어, javax.validation.constraints 패키지에서 제공하는 어노테이션을 사용하여 유효성 검증을 설정할 수 있다.
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
public class User {
@NotEmpty(message = "Name is required.")
private String name;
@Min(value = 18, message = "Age must be 18 or older.")
private int age;
// Getters and Setters
}
- 이러한 방식으로 @NotEmpty, @Min, @Max, @Email 등 다양한 어노테이션을 사용하여 유효성 검사를 처리할 수 있다.
이러한 Validator를 통한 검증을 통해 입력 데이터의 무결성을 보장하고, 애플리케이션의 안정성을 높일 수 있다.
'Develop > Spring' 카테고리의 다른 글
[Spring]빌드도구 Maven과 Gradle의 차이 (0) | 2024.10.18 |
---|---|
[Spring]Filter와 Interceptor의 개념 및 차이 (0) | 2024.10.17 |
@RequestBody와 @ModelAttribute (0) | 2024.08.01 |
RedirectAttributes란 무엇일까 (0) | 2024.07.12 |
@Component 어노테이션과 Validator (0) | 2024.07.10 |