레퍼런스 : https://velog.io/@max9106/Spring-Boot-JPA-MySQL-%EA%B2%8C%EC%8B%9C%EA%B8%80-%EC%88%98%EC%A0%95-%EC%82%AD%EC%A0%9C
프로젝트 전체 소스코드 : https://github.com/rawfishthelgh/boardcrud.git
- detail 템플릿에서 수정 버튼을 누르면 /post/edit/{게시글(boardDto)id} 값으로 url 요청이 날아간다.
- 역시 컨트롤러에서 url매핑을 해준다. 이때 detail 매핑을 했던 것과 같은 로직으로 작동하므로 getPost를 그대로 사용하고, update.html로 렌더링해주면 된다.
- update.html 의 input value에 수정하려는 boardDto 객체 정보가 표시되어 있으므로
- 이렇게 해당 게시글 정보가 그대로 유지된 채 수정 화면이 렌더링된다.
- 이제 실제로 업데이트요청이 되도록 하는 Put요청 매핑 url을 작성한다. Service의 savePost 로직을 그대로 활용해서 db에 저장하고 메인페이지로 redirect를 해준다.
- 그런데 PostMapping으로 해도 수정이 제대로 되던데, 이를 Put이 아닌 Post 요청을 했을 때 생기는 문제는 무엇일까...?(단순 rest api 규칙 지키기 때문...?)
- (질문필요)redirect를 활용하는 이유를 잠깐 짚고 넘어가면 만약 위와 같은 식으로 redirect가 아닌 render를 쓸 경우 url 요청이 /post/edit/게시글 id로 넘어가고 list.html 템플릿을 띄우기만 할 뿐이며 저장한 게시글 정보가 나타나지 않는다. 따라서 아예 메인페이지로 새로운 url 요청을 보내는 redirect를 사용한다.(그런데 왜 이 때 저장한 게시글 정보가 템플릿에 나타나지 않는지는 확실히 모르겠다)
- detail 에서 삭제버튼을 누르면 post/게시글id 값으로 delete value의 요청이 들어온다. 이 역시 원래 html form에서는 post,get 요청만 허용하므로 HiddenHttpMethodFilter 빈 등록 시에만 작동한다.
- 이제 컨트롤러에 @DeleteMapping 을 통해 게시글 삭제 요청을 매핑하는데, service에 deletePost(id) 메소드를 구현해 로직을 처리할 것이다.
- deletePost를 구현하기는 매우 쉽다. deleteById 가 이미 JpaRepository의 CrudRepository에 구현되어 있으므로 인자로 넘겨받은 id 값에 해당하는 객체를 레포지토리에서 삭제할 수 있다.
- 이제 삭제 버튼을 누르면 게시글이 정상적으로 삭제된다.