@Valid 와 validation을 이용한 중복체크 및 유효성 검사
회원가입 환경을 구현할때 여러가지로 고려해야할 사항이 많다.
예들들어, 비밀번호의 최소 갯수, 닉네임의 최수 글자수, email과 닉네임의 중복체크 등등이 있다.
- Controller에서 회원가입 진행 시 유효성 검사하기@Vaild 어노테이션을 설정하면, SignUpForm에 설정한 어노테이션들을 바탕으로 유효성 검사를 진행한다. errors.hasErrors() 유효성 검사를 바탕으로 위배되는 사항이 있는경우 에러가 검출되어 다시 회원가입 창으로 이동하게 된다. 유효성 검사 이후, 중복검사를 진행한다.
- @PostMapping("/sign-up") public String signUpSubmit(@Valid SignUpForm signUpForm, Errors errors){ if(errors.hasErrors()) { return "account/sign-up"; } //중복검사 signUpFormValidator.validate(signUpForm,errors); if(errors.hasErrors()) { return "account/sign-up"; } //회원정보등록 Account account = accountService.processNewAccount(signUpForm); return "redirect:/"; }
2.중복검사를 진행하는 Validator
- boolean supports : 인스턴스가 검증 대상 타입인지 확인
- void validate : 실질적인 검증 작업
@Component
@RequiredArgsConstructor
public class SignUpFormValidator implements Validator {
private final AccountRepository accountRepository;
@Override
public boolean supports(Class<?> aClass) {
return aClass.isAssignableFrom(SignUpForm.class);
}
@Override
public void validate(Object object, Errors errors) {
SignUpForm signUpForm = (SignUpForm)object;
if(accountRepository.existsByEmail(signUpForm.getEmail())){
errors.rejectValue("email", "invalid.email",
new Object[]{signUpForm.getEmail()}, "이미 사용중인 이메일 입니다.");
}
if(accountRepository.existsByNickname(signUpForm.getNickname())){
errors.rejectValue("nickname", "invalid.nickname",
new Object[]{signUpForm.getNickname()}, "이미 사용중인 닉네임 입니다.");
}
}
}
- 회원가입 폼 DTO
- @Data public class SignUpForm { @NotBlank @Length(min = 3, max = 20) @Pattern(regexp = "^[ㄱ-ㅎ가-힣a-z0-9-_]{3,20}$") private String nickname; @Email @NotBlank private String email; @NotBlank @Length(min = 8, max = 50) private String password; }
출처 : https://1-7171771.tistory.com/108?category=885255
'Spring Framework > Spring boot #3' 카테고리의 다른 글
스프링 부트 2.0의 default DBCP, hikariCP가 그렇게 빠르다던데? (hikariCP 저만의 성능 테스트를 해봤습니다.) (0) | 2023.04.26 |
---|---|
[Spring Boot] 문자인증 구현 coolSMS (0) | 2022.05.24 |
[스프링 부트/MVC] 정적 리소스(Static Resources) 기본 설정과 커스텀 방법 (0) | 2021.04.22 |
스프링 부트에서 즉시 웹 개발을 시작할 수 있는 이유 - AutoConfiguration (0) | 2021.04.22 |
Spring Boot + MyBatis 설정 방법(HikariCP, H2) (0) | 2021.04.22 |
[Spring Boot/Spring Web MVC] ViewController를 이용해서 뷰 매핑하기 (0) | 2021.04.22 |
[Spring Boot] ApplicationRunner 등록 방법 정리 (0) | 2021.04.22 |
스프링 부트 테스트 - 내장 서버 랜덤 포트로 띄우기 (0) | 2021.04.22 |