27. BLOG만들기-게시글 수정

박선규's avatar
Feb 06, 2024
27. BLOG만들기-게시글 수정
📌
UPDATE는 @Transactional을 붙여야한다.

(1)게시글 수정 화면 만들기

notion image
📌
게시글 수정 할 수 있는 화면을 만들어야 되는데 각 제목과 내용에는 당연히 값이 들어가 있어야 된다. 왜냐하면 수정하려면 내용이 있어야 되기 때문이다. textarea에는 value 없어서 안에 넣고 input은 value로 값 넣음!
 
 

(2)컨트롤러 생성

@GetMapping("/board/{id}/updateForm") public String updateForm(@PathVariable int id,HttpServletRequest request){ //1. 인증 (로그인) User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser == null){ return "redirect:/loginForm"; } //2. 권한 없으면 나가 (게시글 회원(board(id)이랑 로그인한 회원이랑 동일한지 확인) //모델 위임(id로 board를 조회) Board board = boardRepository.findById(id); if (board.getUserId() != sessionUser.getId()){ return "error/403"; } //3. 가방에 담기(view로 가져가 게시글 수정 하려고) request.setAttribute("board", board); return "board/updateForm"; }
 

(3) 머스테치로 데이터 화면에 전달 할 거 만들기

notion image
 

(4) 상세보기 화면에서 업데이트 화면으로 이동하는 버튼 수정 만들기

notion image
 

(5)테스트 해보기

notion image
notion image
 

(6)수정 완료 페이지 만들기

 

(6.1) GET 요청 때 보낼 DTO만들기

@Data public static class UpdateDTO{ private String title; private String content;
 

(6.2)Controller 만들기

@PathVariable
📌
이 어노테이션은 url경로에 변수 값을 추출하여 매개변수에 집어 넣을 수 있다.
notion image
 
  • BoardRepistory
public void update(BoardRequest.UpdateDTO requestDTO, int id){ Query query = em.createNativeQuery("update board_tb set title=?, content=? where id =?"); query.setParameter(1,requestDTO.getTitle()); query.setParameter(2,requestDTO.getTitle()); query.setParameter(3,id); query.executeUpdate(); }
@PostMapping("/board/{id}/update") public String update(@PathVariable int id, BoardRequest.UpdateDTO requestDTO){ //1. 인증 (로그인) User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser == null){ return "redirect:/loginForm"; }
 

결과 확인

notion image
notion image
notion image
 

join, orderby 등 나머지 하나가 부하가 심함 속도가 느려짐
 
 
게시글 수정 할꺼면 게시글 작성자랑 로그인한 사람이 동일한지 확인하면 된다.
 
 
권한 체크는:일단 조회를 먼저 해야된다.
 
x-form이랑 쿼리스트링이랑 파싱방법이 똑같다.
 
 

6.게시글 수정하기 (액션)

 
@RequestBody: 파싱 전략을 뒤에적혀있는 값이 오브젝트면 → json으로 바꿈
notion image
notion image
notion image
 
 
 
@RequestBody통해 평문 타입으로 데이터 타입을 바꾸는 방법 (세상에 존재 하지 않는 타입)
spring은 기본적으로 파싱전략이 x-www.form-url이다.
 
notion image
 
 
 
Share article
RSSPowered by inblog