on
[Spring Boot] @Valid로 폼 입력값 검증하기
[Spring Boot] @Valid로 폼 입력값 검증하기
반응형
Entity 클래스에 @Id, @Size, @NotBlank 등을 붙여주고 Controller 클래스에서 @Valid 어노테이션을 추가적으로 사용함으로써 기본적인 검증은 가능하다.
1. 기본 form 입력값 검증하기
@Data @Entity @DynamicUpdate @DynamicInsert @Table(name = "tb_userinfo") @IdClass(MemberID.class) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Id @NotNull @Pattern(regexp = "^[a-z0-9]*$", message = "username은 영문(소문자)과 숫자만 가능합니다.") @Size(min = 5, max = 20, message = "username은 5자 이상 20자 이하입니다.") private String username; @NotNull @Size(min = 6, max = 100, message = "암호는 6자 이상 100자 이하 입니다.") private String password; @NotNull @Size(min = 6, max = 45, message = "올바른 이메일을 입력하세요.") @Email(message = "이메일 형식을 맞춰주세요.") private String email; @Column private String role; }
각 필드별로 제약조건 어노테이션을 추가해준다.
@GetMapping("/joinForm") public String joinForm(Model model) { model.addAttribute("member", new Member()); return "/account/joinForm"; } @PostMapping("/join") public String join(@Valid Member member, BindingResult bindingResult){ // view의 form->input 의 name과 매핑됨. if(bindingResult.hasErrors()) { return "/account/joinForm"; } String encPwd = memberService.pwdEncoding(member.getPassword()); member.setPassword(encPwd); memberService.join(member); return "redirect:/loginForm"; }
GetMapping으로 처음 회원가입 화면으로 진입할 때 Member 객체를 만들어서 member라는 키값으로 전달해준다.
PostMapping에서는 View에서 데이터를 담아 전달해준 member 객체에 @Valid 어노테이션을 달아준다.
BindingResult.hasErrors()를 통해 기본적인 에러 유무를 알아 낼 수 있고, 다시 회원가입 화면으로 돌려보낸다.
Username Username Error Password Password Error [email protected] Email Error Get started! exit
타임리프의 th:if가 달린 3개의 div 태그에서 에러를 출력해준다.
th:if=${#fields.hasErrors('필드명')} : 에러가 발생한 경우 true 값을 반환하여 div태그를 표시해준다.
form 태그의 th:object="{member}" : GetMapping 때 전달받은 Member의 키 값을 넣어 전달 받은 객체
"*{username}" : 위 설명을 참고해서 Member.getUsername()을 View에서 사용할 수 있도록 한 값이다. -> ${member.username} 과 같다고 생각!
th:errors="*{password}" : password에 대한 에러 내용을 표시해준다.
from http://black-mint.tistory.com/25 by ccl(A) rewrite - 2021-12-19 16:01:50