@Valid는 Java Bean Validation을 이용해서 객체의 유효성을 검사하는 데에 사용하는 어노테이션이다.
Spring Framework에서 @Valid 어노테이션을 사용하면 Controller 메서드의 매개변수로 전달되는 객체의 유효성을 검사할 수 있다.
@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";
}
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
private String username;
@NotBlank
private String password;
@Email
@NotBlank
private String email;
private boolean admin = false;
private String adminToken = "";
}
@Valid SignupRequestDto requestDto는 SignupRequestDto 객체의 유효성 검사를 트리거한다. 유효성 검사는 SignupRequestDto 내에 정의된 어노테이션들 (@NotBlank, @Email 등)을 기반으로 진행된다. 만약 유효성 검사에서 오류가 발생한다면, 해당 오류들은 BindingResult 객체에 리스트 형태로 저장된다.
--
Controller Method에 @Valid 사용:
@Valid
를 사용하여 객체의 유효성을 검사할 수 있다.public String register(@Valid User user, BindingResult bindingResult) { ... }
BindingResult 사용:
BindingResult
객체에 저장된다.BindingResult
객체는 @Valid
어노테이션을 사용한 객체 바로 뒤에 위치해야 한다.bindingResult.hasErrors()
메서드를 사용하여 오류가 있는지 확인할 수 있다.bindingResult.getFieldErrors()
를 사용하면 발생한 모든 필드 오류를 가져올 수 있다.Error Handling:
BindingResult
를 사용하여 오류가 발생한 경우, 해당 오류를 처리하거나 사용자에게 오류 메시지를 보여줄 수 있다.if (bindingResult.hasErrors()) {
// Handle validation errors
}
Custom Error Messages:
public class User {
@NotBlank(message = "Username cannot be empty!")
private String username;
...
}
Global Error Handling:
@ControllerAdvice
와 @ExceptionHandler
를 사용하여 전역적으로 유효성 검사 오류를 처리할 수 있다. 이렇게 하면 각 컨트롤러 메서드에서 오류를 처리하는 대신 중앙 집중식으로 오류를 처리할 수 있다.Custom Validations: