본문 바로가기
Spring/Spring boot

BindingResult 와 rejectValue 스프링 회원가입 유효성 검사

by java나유 2022. 11. 3.

스프링 프레임워크로 사용자 회원가입과 로그인을 컨트롤할 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

댓글