정보 조회와 정보 수정은 같은 URI를 사용하고 Get요청인지, Put요청인지에따라 구분

📌 회원 정보 조회

🔍 Controller

/** 회원 정보 페이지 */
@GetMapping("/user")
public ResponseEntity<ResponseUser> my_page(HttpServletRequest request){
    User user = (User) request.getAttribute("user");

    ResponseUser responseUser = ResponseUser.builder().user(user).build();

    return ResponseEntity.status(HttpStatus.OK).body(responseUser);
}

앞의 Filter에서 JWT에서 추출한 아이디로 User 객체를 조회해 함께 넘겨줬기때문에 HttpServletRequest 에서 유저 객체를 가져 올 수 있다.

해당 객체의 정보로 Response DTO를 만들어 status code와 함께 반환

🔍 ResponseUser DTO

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class ResponseUser {
    private String username;

    private String nickname;

    private String telephone;

    private String email;

    private String address;

    private String authority;

    @Builder
    public ResponseUser(User user){
        this.username = user.getUsername();
        this.nickname = user.getNickname();
        this.telephone = user.getTelephone();
        this.email = user.getEmail();
        this.address = user.getAddress();
        this.authority = user.getAuthority();
    }
}

📌 회원 정보 수정

🔍 Controller

@PutMapping("/user")
public ResponseEntity<ResponseUser> update(HttpServletRequest request, @Valid @RequestBody RequestModify requestModify) {
    ResponseUser responseUser = userService.updateUser(requestModify, (User) request.getAttribute("user"));
    return (responseUser != null) ?
            ResponseEntity.status(HttpStatus.OK).body(responseUser) :
            ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}

프론트엔드에서 넘겨준 수정 요청한 값이 담긴 DTO와 JWT에서 추출한 유저 객체를 Service Layer로 넘김

🔍 RequestModify DTO

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class RequestModify {

    @NotEmpty(message = "닉네임 입력은 필수 입니다.")
    private String nickname;

    @NotEmpty(message = "전화번호 입력은 필수 입니다.")
    private String telephone;

    @NotEmpty(message = "이메일 입력은 필수 입니다.")
    @Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}$", message = "이메일 형식에 맞지 않습니다.")
    private String email;

    @NotEmpty(message = "주소 입력은 필수 입니다.")
    private String address;

    public void toEntity(User user) {
        user.updateUser(nickname, telephone, e_mail, address);
    }
}

회원가입때와 마찬가지로 @Valid 어노테이션으로 유효성 검사

🔍 UserService

@Override
    public ResponseUser updateUser(RequestModify requestModify, User user) {
        boolean check_telephone = checkTelephone(requestModify.getTelephone());
        boolean check_email = checkEmail(requestModify.getEmail());

        if ((check_telephone && !user.getTelephone().equals(requestModify.getTelephone()))
                || (check_email && !user.getEmail().equals(requestModify.getEmail()))
                || ~~!requestModify.getUsername().equals(user.getUsername()~~)) {
            return null;
        }

        requestModify.toEntity(user);

        User modified_user = userRepository.save(user);

        return ResponseUser.builder().user(modified_user).build();
    }

요청온 RequestModify DTO의 값으로 User Entity 업데이트 후 영속화

영속화된 객체로 다시 응답 ResponseUser DTO 생성 후 반환

🔍 User Entity