
PUT 요청!! 하자!!
[ BoardApiController ]
@RequiredArgsConstructor
@RestController
public class BoardApiController {
private final BoardRepository boardRepository;
@PutMapping("/api/boards/{id}")
public ApiUtil<?> update(@PathVariable Integer id, @RequestBody BoardRequest.UpdateDTO requestDTO, HttpServletResponse response) {
// boardRepository.updateById(requestDTO, id);
//
// Board board = boardRepository.selectOne(id);
// if (board == null) {
// response.setStatus(404);
// return new ApiUtil<>(404, "해당 게시글을 찾을 수 없습니다");
// }
boardRepository.updateById(requestDTO, id);
//select가 아니니까 받아올 데이터가 없다!! 그러니 null
return new ApiUtil<>(null);
}
@RequestBody 꼭 써줘야 json으로 간다ㅠㅠ 아니면 계속 null값이 들어옴
@PutMapping("/api/boards/{id}/update") 라고 안 쓰는 이유?
board의 1번을 put(update) 해주세요 라고 읽을 수 있기 때문에 update는 생략한다.
만약 Post 매핑으로 작성했다면 읽을 수 가 없으니 (가독성)? /update까지 적어줘야 한다.
[ BoardController ]
@GetMapping("/board/{id}/updateForm")
public String updateForm(@PathVariable int id, HttpServletRequest request) {
Board board = boardRepository.selectOne(id);
request.setAttribute("board", board);
return "board/updateForm";
}
이렇게 쓰면 화면에 수정 전 게시글 데이터도 같이 뿌려짐!

가방에 담은걸 업데이트 폼에서 출력(뿌리기)
[ updateForm.mustache ]
{{> layout/header}}
<div class="container p-5">
<div class="card">
<div class="card-header"><b>익명 글수정 화면입니다</b></div>
<div class="card-body">
<form>
<input type="hidden" id="id" value="{{board.id}}"> //id땡기는거 여기에 id 넣어놓고 하는게 제일 낳다
<div class="mb-3">
<input type="text" class="form-control" placeholder="{{board.author}}" id="author">
</div>
<div class="mb-3">
<input type="text" class="form-control" placeholder="{{board.title}}" id="title">
</div>
<div class="mb-3">
<textarea class="form-control" rows="5" id="content">{{board.content}}</textarea>
</div>
<button type="button" onclick="btnUpdate()" class="btn btn-primary form-control">글수정완료</button>
</form>
</div>
</div>
</div>
<script>
function btnUpdate() { //일관성 중요. btn~
let id = $("#id").val();
// let boardId = {{board.id}}
let board = {
title: $("#title").val(),
content: $("#content").val(),
author: $("#author").val()
};
console.log(board);
// let boardJson = JSON.stringify(board);
// console.log(boardJson);
$.ajax({
url: `/api/boards/${id}`,
type: "put",
data: JSON.stringify(board),
contentType: "application/json; charset=utf-8"
}).done((res)=>{
location.href = `/`;
}).fail((res)=>{
alert(res.responseJSON.msg);
});
}
</script>
{{> layout/footer}}
placeholder에 mustache 줬다. value 값으로 넣을 순 없는걸까?

id를 hidden으로 넣음
[ BoardRequest ]
package shop.mtcoding.blog.board;
import lombok.Data;
public class BoardRequest {
@Data
public static class WriteDTO {
private String title;
private String content;
private String author;
}
@Data
public static class UpdateDTO {
private String title;
private String content;
private String author;
}
}
[ BoardRepository ]
@Transactional
public void update(Integer id, BoardRequest.UpdateDTO requestDTO) {
Query query = em.createNativeQuery("update board_tb set title = ?, content = ?, author = ? where id = ?");
query.setParameter(1, requestDTO.getTitle());
query.setParameter(2, requestDTO.getContent());
query.setParameter(3, requestDTO.getAuthor());
query.setParameter(4, id);
query.executeUpdate();
}
[ 화면 확인 ]

게시글 수정 잘 된다!
Share article