이 내용은 스프링 부트 쇼핑몰 프로젝트 with JPA 책을 학습한 내용입니다.
1. MemberController
- Get 요청으로 회원가입 페이지를 요청할 경우 MemberFormDto 객체를 같이 넘김
- POST 요청으로 넘어온 회원가입 정보를 MemberFormDto 객체로 받음
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"; } // restfull 방식. 이름이 똑같아도 어노테이션이 다르니까 ㄱㅊ다 // 하지만 오버로딩이 안 되면 에러 뜹니다 오버로딩 해줘야 함! @PostMapping("/new") public String memberForm(@Valid MemberFormDto memberFormDto) {// @Valid 자동으로 체크해주는 어노테이션 Member member = Member.createMember(memberFormDto, passwordEncoder); memberService.saveMember(member); return "redirect:/"; } }
2. 회원 가입 페이지
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layouts/layout1}"> <!-- 사용자 CSS 추가 --> <th:block layout:fragment="css"> <style> .fieldError { color: #bd2130; } </style> </th:block> <!-- 사용자 스크립트 추가 --> <th:block layout:fragment="script"> <script th:inline="javascript"> $(document).ready(function(){ var errorMessage = [[${errorMessage}]]; if(errorMessage != null){ alert(errorMessage); } }); </script> </th:block> <div layout:fragment="content"> <form action="/member/new" role="form" method="post" th:object="${memberFormDto}"> <div class="form-group"> <label th:for="name">이름</label> <input type="text" th:field="*{name}" class="form-control" placeholder="이름을 입력해주세요"> <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}" class="fieldError">Incorrect data</p> </div> <div class="form-group"> <label th:for="email">이메일주소</label> <input type="email" th:field="*{email}" class="form-control" placeholder="이메일을 입력해주세요"> <p th:if="${#fields.hasErrors('email')}" th:errors="*{email}" class="fieldError">Incorrect data</p> </div> <div class="form-group"> <label th:for="password">비밀번호</label> <input type="password" th:field="*{password}" class="form-control" placeholder="비밀번호 입력"> <p th:if="${#fields.hasErrors('password')}" th:errors="*{password}" class="fieldError">Incorrect data</p> </div> <div class="form-group"> <label th:for="address">주소</label> <input type="text" th:field="*{address}" class="form-control" placeholder="주소를 입력해주세요"> <p th:if="${#fields.hasErrors('address')}" th:errors="*{address}" class="fieldError">Incorrect data</p> </div> <div style="text-align: center"> <!-- type이 submit인 경우 form에 적혀있는 주소로 값이 post로 값이 날라간다 --> <button type="submit" class="btn btn-primary" style="">Submit</button> </div> <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"> </form> </div> </html>

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