Spring/Spring boot
BindingResult 와 rejectValue 스프링 회원가입 유효성 검사
java나유
2022. 11. 3. 12:46
스프링 프레임워크로 사용자 회원가입과 로그인을 컨트롤할 controller 코드중에서 사용한 주요 메소드를 간략히 정리했다.
@PostMapping("/signup") // Post: 회원가입 진행
public String signup(@Valid UserCreateForm userCreateForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "signup_form";
}
if (!userCreateForm.getPassword1().equals(userCreateForm.getPassword2())) {
bindingResult.rejectValue("password2", "passwordInCorrect",
"📌패스워드가 일치하지 않습니다.");
return "signup_form";
}
//중복 확인
try {
userService.create(userCreateForm.getUsername(),
userCreateForm.getEmail(), userCreateForm.getPassword1());
}
catch (DataIntegrityViolationException e){
e.printStackTrace();
bindingResult.reject("signupFailed","이미 등록된 사용자입니다.");
return "signup_form";
}
catch (Exception e){
e.printStackTrace();
bindingResult.reject("signupFailed",e.getMessage());
return "signup_form";
}
return "redirect:/";
}
BindingResult
검증오류를 보관하는 객체이다. 매개변수에서 자신이 검증할 객체 바로 다음에 위치해야한다.
@Valid UserCreateForm userCreateForm, BindingResult bindingResult
필드 오류 처리를 단순화 하는
rejectValue rejectValue(필드명, 오류코드, 에러메시지)
를 사용한다.
if (!userCreateForm.getPassword1().equals(userCreateForm.getPassword2())) {
bindingResult.rejectValue("password2", "passwordInCorrect",
"📌패스워드가 일치하지 않습니다.");
return "signup_form";
}
패스워드1과 패스워드2가 일치하지않으면
패스워드2 (필드명)에 passwordInCorrect (오류코드) 를 삽입하고 에러메시지 "패스워드가 일치하지않습니다" 하고 돌려준다.
html에서는 이 오류 메세지를 어떻게 처리하냐면
공통으로 사용할 form_errors.html를 만들어주고
<div th:fragment="formErrorsFragment" class="alert alert-danger"
role="alert" th:if="${#fields.hasAnyErrors()}" xmlns:th="http://www.w3.org/1999/xhtml">
<div th:each="err : ${#fields.allErrors()}" th:text="${err}" />
</div>
해당 html들에
<div th:replace="form_errors :: formErrorsFragment"></div>
를 삽입해주면된다.
728x90