70. 댓글 작성하기
by 볼빵빵오춘기Board
댓글이 작성된 순서 내림차순으로 정렬되서 가져와야하기때문이다.
@OrderBy("id desc") @JsonIgnoreProperties({"board"}) @OneToMany(mappedBy = "board",fetch = FetchType.EAGER,cascade = CascadeType.REMOVE) // mappedBy 연관관계의 주인이 아니다. private List<Reply> replys;
board.js
- replySave() 함수를 작성하면 되는데 가져올 때 해당 Board의 원글의 정보도 알아야한다. (몇 번째 원글인지)
- 따라서 detail.jsp 수정하여 해당 번호를 알 수 있도록 하자.
$("#btn-reply-save").on("click",()=>{ this.replySave(); });
detail.jsp
<div class="card"> <form> <input type="hidden" id="boardId" value="${board.id}"> <div class="card-body"> <textarea id="reply-content" rows="2" class="form-control"></textarea> </div> <div class="card-footer"> <button type="button" id="btn-reply-save" class="btn btn-primary">등록</button> </div> </form> </div>
board.js
주의! 따옴표(’) x , 백틱(`) o
백틱을 사용하는 이유는 url 뒷부분의 게시물번호를 동적으로 받기 위해서이다.
replySave: function () { let data = { boardId : $("#boardId").val(), content: $("#reply-content").val(), }; $.ajax({ type: "POST", url: `/api/board/${data.boardId}/reply`, // 참고로 여기서 따옴표가 아니라 백틱이다! data: JSON.stringify(data), contentType: "application/json; charset=utf-8", dataType: "json", }).done(function (resp) { alert("댓글작성이 완료되었습니다."); location.href = `/board/${data.boardId}`; }).fail(function (error) { alert(JSON.stringify(error)); }); },
BoardApiController
@PostMapping("/api/board/{boardId}/reply") public ResponseDto<Integer> replaySave(@PathVariable int boardId,@RequestBody Reply reply, @AuthenticationPrincipal PrincipalDetail principal){ boardService.댓글쓰기(principal.getUser(),boardId,reply); return new ResponseDto<Integer>(HttpStatus.OK.value(),1); }
BoardService
@Autowired private ReplyRepository replyRepository;
@Transactional public void 댓글쓰기(User user, int boardId, Reply requestReply){ Board board= boardRepository.findById(boardId).orElseThrow(()->{ return new IllegalArgumentException("댓글 찾기 실패 : 게시글 id를 찾을 수 없습니다."); }); requestReply.setUser(user); requestReply.setBoard(board); replyRepository.save(requestReply); }

블로그의 정보
Hello 춘기's world
볼빵빵오춘기