Language/Springboot

[Springboot] 회원 정보(닉네임) 수정하기 (+추가 기능 구현 중)

rame 2022. 8. 31. 16:28


1. UserUpdateForm 엔티티 작성

2. UserController.java 작성

3. UserService.java 작성

4. user_form.html 작성


 

 

 

1. UserUpdateForm 엔티티 작성

 - 회원가입을 해줬을 때 만들어줬던 방식과 같이 UserUpdateForm.java 를 작성

 

파일 경로 : com.mysite.sbb/user/UserUpdateForm.java

import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotEmpty;

@Getter
@Setter
public class UserUpdateForm {
    @NotEmpty(message = "닉네임은 필수항목입니다.")
    private String nickname;
}

 

 

 

2. UserService.java 작성

 - SiteUser와 nickname을 아규먼트로 받아오게 함

 - setNickname에 받아온 nickname을 넣어주고 userRepository에 저장하게 만듦

 

파일 경로 : com.mysite.sbb/user/UserService.java

public SiteUser modify(SiteUser siteUser, String nickname) {
    siteUser.setNickname(nickname);
    this.userRepository.save(siteUser);
    return siteUser;
}

 

 

 

 

3. UserController.java 작성

 3-1) @GetMapping 작성

  - userService에 있는 getUser를 이용하여 현재 로그인 되어있는 사용자의 정보를 가져옴

  - model.addAttribute로 html에서 siteUser의 변수를 가져올 수 있음

 

파일 경로 : com.mysite.sbb/user/UserController.java

@PreAuthorize("isAuthenticated()")
@GetMapping("/userinfo")
public String userinfo(UserUpdateForm userUpdateForm, Model model, Principal principal) {
    SiteUser siteUser = this.userService.getUser(principal.getName());
    model.addAttribute("siteUser", siteUser);

    return "user_form";
}

 

 

 3-2) @PostMapping 작성

  - userService에 작성한 modify 메소드에 SiteUser와 userUpdateForm에서 닉네임을 가져와 넣어줌

 

파일 경로 : com.mysite.sbb/user/UserController.java

@PreAuthorize("isAuthenticated()")
@PostMapping("/userinfo")
public String usermodify(UserUpdateForm userUpdateForm, Principal principal) {
    SiteUser siteUser = this.userService.getUser(principal.getName());

    this.userService.modify(siteUser, userUpdateForm.getNickname());
    return "redirect:/user/userinfo";
}

 

 * PostMapping 단계에서 자꾸 닉네임 값에 null 이 들어갔었다

터미널에서 siteUser nickname과 userUpdateForm의 nickname을 확인해 본 결과

siteUser.getNickname자체가 null 값이었고 userUpdateForm.Nickname에 값이 들어가 있어서 그런거였음

그것도 모르고 userUpdateForm.setNickname(userUpdateForm.getNickname()); 을 해주고 있었으니 당연한 거였음

 

 

 

4. user_form.html 작성

 - 

 

파일 경로 : resources/templates/UserController.java

<html layout:decorate="~{layout}">
<div layout:fragment="content" class="container my-3">
    <div class="my-3 border-bottom">
        <div>
            <h4>회원정보</h4>
        </div>
    </div>

    <form th:action="@{/user/userinfo}" th:object="${userUpdateForm}" method="post">
        <div th:replace="form_errors :: formErrorsFragment"></div>
        <div class="mb-3">
            <label for="username" class="form-label">사용자ID</label>
            <input type="text" th:field="${siteUser.username}" readonly class="form-control">
        </div>
        <div class="mb-3">
            <label for="nickname" class="form-label">닉네임</label>
            <input type="text" th:field="${siteUser.nickname}" class="form-control">
        </div>
        <div class="mb-3">
            <label for="email" class="form-label">이메일</label>
            <input type="email" th:field="${siteUser.email}" id="email" readonly class="form-control">
        </div>
        <button type="submit" class="btn btn-primary" onclick="alert('수정되었습니다.')">수정하기</button>
    </form>
</div>
</html>

 

 

 


추가 기능 넣을 것

1. 닉네임 NULL값 안들어가게 설정

2. 비밀번호 변경 설정

3. 프로필 사진 설정