Search

31. 스프링부트 포토그램 인증 회원정보수정 Ajax 사용하기

포토그램 인증 구현하기

회원정보 수정 구현

이제 회원정보 수정을 진행 할거다.
update.jsp 부분에서 프로필 수정 form태그 부분에
PUT 같은 경우는 이렇게 넣어서 진행 할 수 없다.
PUT이나 DELETE 같은 경우는 자바스크립트를 이용해서 요청을 해야한다.
제출 버튼을 클릭 했을 때 update 함수를 호출하게 만들어준다
<button onclick="update()">제출</button>
Java
복사
소스 하단에 update.js를 추가해주고
<script src="/js/update.js"></script>
Java
복사
update.js에 잘 실행되는지 alert하나를 추가해준다
// (1) 회원정보 수정 function update() { alert("update") }
Java
복사
이제 데이터를 다 담아서 요청해볼거다.
<button type="button" onclick="update(${principal.user.id } ,event)">제출</button>
Java
복사
// (1) 회원정보 수정 function update(userId, event) { console.log(event); }
Java
복사
버튼 클릭시 console.log로 찍힌다
event 부분은 빼주고
<button type="button" onclick="update(${principal.user.id })">제출</button>
Java
복사
// (1) 회원정보 수정 function update(userId) { let data = $("#profileUpdate").serialize(); console.log(data); }
Java
복사
jquery 사용 가능한 이유는 header부분에 이미 추가해줬기 때문이다.
serialize()를 하면은 id가 profileUpdate인 form 데이터가 다 담긴다.
$.ajax({ }).done(res=>{ }).fail(error=>{ });
Java
복사
ajax 틀 만들어주고
$.ajax({ type: "put", url : '/api/user/${userId}', data: data, contentType : "application/x-www-form-urlencoded: charset=utf-8", dataType : "json" }).done(res=>{ console.log("update 성공") }).fail(error=>{ console.log("update 실패") });
Java
복사
해당 update 관련된 Controller를 만들어주자.
web 안에 api 폴더를 생성
api 폴더 안에 UserApiController.java 생성
@PutMapping("/api/user/{id}") public String update() { };
Java
복사
update해서 넘겨줄 데이터를 담아줄 DTO를 미리 생성해주자
dto 폴더 안에 user 폴더 생성 UserUpdateDto.java 생성
package com.cos.photogramstart.web.dto.user; import com.cos.photogramstart.domain.user.User; import lombok.Data; @Data public class UserUpdateDto { private String name; //필수 private String password; //필수 private String website; private String bio; private String phone; private String gender; // 조금 위험함. 코드 수정이 필요할 예정 (필수값이 아닌 데이터들도 포함되어 있어서) public User toEntity() { return User.builder() .name(name) .password(password) .website(website) .bio(bio) .phone(phone) .gender(gender) .build(); } }
Java
복사
필수가 아닌 데이터를 entity로 만들면 위험하다.
UserApiController.java에 다시 dto 추가한 부분을
@PutMapping("/api/user/{id}") public String update(UserUpdateDto userUpdateDto) { System.out.println(userUpdateDto); return "ok"; };
Java
복사
다시 제출하면 오른쪽에 update 실패라 뜨는데 json 으로 받기로 되어있었는데 String으로 받아서 그렇다.

*참고