LANGUAGE STUDY/Spring
[Spring JPA] 1-5. 회원 가입 폼 서브밋 검증
KUNDUZ
2021. 4. 30. 16:45
반응형
먼저, sign-up.html에서 회원가입을 하게 되면 post 방식으로 데이터를 전송하는데 이 데이터를 받기위한 controlller를 제작해 줍니다.
@PostMapping("/sign-up")
public String signUpSubmit(@Valid SignUpForm signUpForm, Errors errors) {
if(errors.hasErrors()) {
return "account/sign-up";
}
return "redirect:/index.html";
}
그리고 서브및 검증을 위해서 Validator을 작성해 줍니다.
package com.studyolle.account.controller;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import com.studyolle.repository.AcoountRepository;
import com.studyolle.repository.dto.SignUpForm;
import lombok.RequiredArgsConstructor;
@Component
@RequiredArgsConstructor //final 인 생성자를 자동으로 만들어 준다.
public class SignUpFormValidator implements Validator{
private final AcoountRepository accountRopository;
@Override
public boolean supports(Class<?> aClass) {
return aClass.isAssignableFrom(SignUpForm.class);
}
@Override
public void validate(Object o, Errors errors) {
SignUpForm signUpForm=(SignUpForm)errors;
if(accountRopository.existsByEmail(signUpForm.getEmail())) {
errors.rejectValue("email","invalid.email",new Object[] {signUpForm.getEmail()},"이미 사용중인 이메일입니다.");
}
if(accountRopository.existsByNickname(signUpForm.getNickname())) {
errors.rejectValue("nickname","invalid.nickname",new Object[] {signUpForm.getEmail()},"이미 사용중인 닉네임입니다.");
}
}
}
위와 같이 이메일과 닉네임이 중복되는 것을 체크해 주는 validator를 작성해 줍니다.
package com.studyolle.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.transaction.annotation.Transactional;
import com.studyolle.repository.dto.Account;
@Transactional(readOnly = true)
public interface AcoountRepository extends JpaRepository<Account, Long>{
boolean existsByNickname(String nickname);
boolean existsByEmail(String email);
}
ropository에 존재를 확인해 주어야 하는데 spring에서 제공해 주는 Repository를 사용해서 DB에 중복 되는게 있는지 확인해 줄 수 있도록 작성해 준다.
반응형