Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

회원 등록 본문

인프런/[인프런] Springboot와 JPA활용 1

회원 등록

Seung__ 2021. 8. 6. 16:55

1. memberForm


  • 회원 가입에서 넘어오는 회원 데이터
  • Entity와 분리
  • @NotEmpty를 통한 validation가능. empty일 경우 스프링이 error띄움.
@Getter @Setter
public class MemberForm {

    @NotEmpty(message = "회원 이름은 필수입니다.")
    private String name;

    private String city;
    private String street;
    private String zipcode;
}

 

2. MemberController


  • createForm
    - @GetMapping
    - 해당 Get method로 해당 url 접근하면 회원가입 화면으로 이동.
    - 빈 MemberForm들고감. --> validation에 활용.
@Controller
@RequiredArgsConstructor
public class MemberController {

    private final MemberService memberService;

    @GetMapping("/members/new")
    public String createForm(Model model){

        //빈 객체 들고감.
        model.addAttribute("memberForm", new MemberForm());
        return "members/createMemberForm";
    }
  • create
    - @PostMapping
    - 회원 가입 화면에서 전달받은 MemberForm을 받음.
    - 전달 받은 회원 정보를 가지고 Member 생성
    - 정상적으로 회원가입 완료 시 "redirect:/" 홈 화면으로 이동
    - @Valid MemberForm memberForm
      MemberForm의 name 필드에 @NotEmpty 적용함
     @Valid 적용하면 해당 항목 검증 가능. empty시 에러 발생.
    - BindingResult 을 사용하면 Validation 결과를 활용할 수 있음.
      Valiation으로 인한 에러 발생시 튕기는 것이 아니라 validation결과를 가지고 
      코드 실행 가능.
    - name 필드 empty 시 회원 가입 화면으로 돌아감.
    @PostMapping("/members/new")
    public String create(@Valid MemberForm memberForm, BindingResult result){
      //@valid 사용하면 Form의 validtaion관련 항목 검증함.

        if(result.hasErrors()){
            return "members/createMemberForm";
        }

        Address address = new Address(memberForm.getCity(), memberForm.getStreet(), memberForm.getZipcode());

        Member member = new Member();
        member.setName(memberForm.getName());
        member.setAddress(address);

        memberService.join(member);
        return "redirect:/"; //첫번째 페이지로 넘어감

    }
}

- 이 때 validtaion 내용을 타임리프를 통해 띄워줄 수 있음.

    <input type="text" th:field="*{name}" class="form-control"
             placeholder="이름을 입력하세요"
             th:class="${#fields.hasErrors('name')}? 'form-controlfieldError' : 'form-control'">
      <p th:if="${#fields.hasErrors('name')}"

 

3. 실행 결과


  • 회원 가입(정상)
insert into member (city, street, zipcode, name, member_id) values (?, ?, ?, ?, ?)
insert into member (city, street, zipcode, name, member_id) values ('dd', 'ss', '1123', 'dd', 1);
  • name 필드가 empty 면??? : BindingResult 미사용

  • name 필드가 empty 면??? : BindingResult 사용

와씨

 

4. GitHub : 210806 Member Join


 

GitHub - bsh6463/SpringBootJPA1

Contribute to bsh6463/SpringBootJPA1 development by creating an account on GitHub.

github.com

 

Comments