이 내용은 스프링 부트 쇼핑몰 프로젝트 with JPA 책을 학습한 내용입니다.
Validation 참고
1. 회원가입 검증
// gradle 추가 implementation 'org.springframework.boot:spring-boot-starter-validation:3.0.1'
회원가입 기능 구현
- 유효한 값인지 판단하는 소스가 여러 군데 흩어지면 관리하기가 힘듦
- → 자바 빈 벨리데이션을 이용하면 객체의 값을 효율적 검증 가능
2. validation 어노테이션

3. 회원가입 DTO 유효성 검증
package kr.spring.member.dto; // 회원가입 화면으로부터 넘어오는 가입정보를 담을 Dto import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import lombok.Setter; import lombok.ToString; import org.hibernate.validator.constraints.Length; @Getter @Setter @ToString public class MemberFormDto { @NotBlank(message = "이름은 필수 항목입니다.") private String name; @NotEmpty(message = "이메일은 필수 항목입니다.") @Email(message = "이메일 형식으로 입력하세요.") private String email; @NotEmpty(message = "비밀번호는 필수 항목입니다.") @Length(min = 4, max = 12, message = "최소 4자, 최대 12자를 입력하세요.") private String password; @NotEmpty(message = "주소는 필수 항목입니다.") private String address; }
4. 유효성 검증 결과에 따른 Controller
- 검증하려는 객체 앞에 @Value 어노테이션 지정
- 검증 결과를 받을 BindingResult 매개변수 추가
- 입력한 회원가입 데이터에 문제가 있으면 다시 회원가입 페이지로 돌아감
- 중복된 회원가입이면 지정된 예외가 발생하고 해당 에러 메시지를 다시 회원가입 페이지로 넘김
- 문제가 없으면 메인페이지로 redirect
package kr.spring.member.controller; import jakarta.validation.Valid; import kr.spring.member.dto.MemberFormDto; import kr.spring.member.entity.Member; import kr.spring.member.service.MemberService; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @Controller @Log4j2 @RequestMapping("/member") public class MemberController { @Autowired MemberService memberService; @Autowired PasswordEncoder passwordEncoder; @GetMapping("/new") public String memberForm(Model model) { model.addAttribute("memberFormDto", new MemberFormDto()); return "member/memberForm"; } @PostMapping("/new") public String memberForm(@Valid MemberFormDto memberFormDto, // @Valid 자동으로 체크해주는 어노테이션 BindingResult bindingResult, Model model) { // 에러에 대한 결과를 받아옴 // annotation에서 에러가 있으면 다시 memberform으로 돌아간다 -> 바인딩 에러 시 처리 if(bindingResult.hasErrors()) { // bindingResult가 하나라도 에러인 경우 return "member/memberForm"; } try { //회원가입을 처리하는 구문 Member member = Member.createMember(memberFormDto, passwordEncoder); memberService.saveMember(member); } catch (IllegalStateException e) { //회원가입 처리 시 문제가 생기면 에러메세지 띄우기 model.addAttribute("errerMessage", e.getMessage()); //문제가 있으면 회원가입으로 돌아감 return "member/memberForm"; } return "redirect:/"; } }
5. 유효성 검증 결과
- 정상적인 경우 (비밀번호 암호화 적용됨)


- 입력한 데이터에 문제가 있는 경우

'Web & Android > 스프링 부트 쇼핑몰 프로젝트 with JPA' 카테고리의 다른 글
[스프링 부트 쇼핑몰 프로젝트 with JPA] 4. 페이지 권한 설정 (0) | 2023.10.15 |
---|---|
[스프링 부트 쇼핑몰 프로젝트 with JPA] 3. 로그인/로그아웃 (0) | 2023.10.15 |
[스프링 부트 쇼핑몰 프로젝트 with JPA] 2-2. 회원가입 페이지 (0) | 2023.10.15 |
[스프링 부트 쇼핑몰 프로젝트 with JPA] 2-1. 회원가입 로직 (0) | 2023.10.15 |
[스프링 부트 쇼핑몰 프로젝트 with JPA] 1-2. 상품 Repository 설계 (0) | 2023.10.15 |