티스토리 뷰
<div class="replyContent">
//댓글 등록될 곳
<div id="replyList">
</div>
<form>
<input type="hidden" id="boardNo" th:value="${dto.boardNo}">
<div class="card" style="margin-top: 10px;">
<div class="card-body"><textarea class="form-control" rows="1" id="replyContent"></textarea></div>
<div class="card-footer"><button class="btn btn-primary" id="btn-reply-save">등록</button></div>
</div>
</form>
</div>
div태그 id="replyList" 부분에 가져온 데이터들을 삽입하게 된다.
//스크립트 태그
<script layout:fragment="script" th:inline="javascript">
$(document).ready(function () {
getReplyList()
})
function getReplyList() {
var boardNo = [[ ${dto.boardNo} ]]
const replyList = document.getElementById("replyList");
$.ajax({
type: 'GET',
url: '/reply/' + boardNo,
success: function (res) {
replyList.innerHTML = ``
for (let i = 0; i < res.data.length; i++) {
const reply = res.data[i];
const date = new Date(reply.replyRegDate);
const formattedDate = date.toISOString().slice(0, 16).replace('T', ' ');
let replyContent = reply.replyContent;
const html = `
<th:block>
<div class="row justify-content-start px-2 pt-2">
${formattedDate}
</div>
<div class="row border-bottom px-2 pb-3 text-break">
${replyContent}
</div>
</th:block>
`;
replyList.innerHTML += html;
}
},
})
}
</script>
날짜 포맷팅 같은 경우 Date객체를 가져와 따로 날짜 처리를 해줘야 된다.
Controller
/**
* 댓글 비동기 RestController
* @author mogreene
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class ReplyController {
private final ReplyService replyService;
/**
* 댓글 등록
* @param boardNo
* @param replyDTO
* @return
*/
@PostMapping("/reply/{boardNo}")
public ResponseEntity<ApiResponseDTO<?>> postReply(@PathVariable Long boardNo,
@RequestBody ReplyDTO replyDTO) {
int success = replyService.postReply(boardNo, replyDTO);
if (success != 1) {
throw new IllegalArgumentException("댓글 등록 실패!");
}
ApiResponseDTO<?> apiResponseDTO = ApiResponseDTO.builder()
.httpStatus(HttpStatus.CREATED)
.data("Reply Create!")
.build();
return new ResponseEntity<>(apiResponseDTO, HttpStatus.CREATED);
}
/**
* 댓글 조회
* @param boardNo
* @return
*/
@GetMapping("/reply/{boardNo}")
public ResponseEntity<ApiResponseDTO<?>> getReplyList(@PathVariable Long boardNo) {
List<ReplyDTO> dtoList = replyService.getReply(boardNo);
ApiResponseDTO<?> apiResponseDTO = ApiResponseDTO.builder()
.httpStatus(HttpStatus.CREATED)
.data(dtoList)
.build();
return new ResponseEntity<>(apiResponseDTO, HttpStatus.CREATED);
}
}
ApiResponseDTO 는 일관된 Json응답을 보내주기 위해 따로 만들었다. 만약 필요없다면 ResponseEntity<?>로 아무값이나 넣어주면 된다.
그 외 댓글을 가져오는 service나 repository는 많은 예제와 원하는 설정이 있을테니 알아서 입맛것 사용하면 될듯하다.
'Backend > SpringBoot' 카테고리의 다른 글
Jwt + SpringSecurity + Mybatis 구현 (0) | 2023.07.06 |
---|---|
SpringBoot 동적인(?) 파일 수정 (0) | 2023.05.15 |
SpringBoot 파라미터 달고다니기 (0) | 2023.04.26 |
SpringSecurity 없이 SpringBoot 자동로그인 구현 (0) | 2023.04.24 |
[객체지향적 생각?] 게시글과 댓글로 생각해본 SRP(단일 책임 원칙) (0) | 2023.04.11 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- 객체지향
- 한권으로끝내기리눅스마스터2급
- it책 리뷰
- script setup
- JWT
- java 플레이그라운드
- 짝지어제거하기
- 객체지향의 사실과 오해
- 토스페이먼츠
- 함께모으기
- 알고리즘
- vuex
- springboot
- 리눅스마스터2급
- 프로그래머스
- pinia
- LEVEL2
- 책리뷰
- 스프링부트
- Vue.js3
- 객체 지도
- mybatis구현
- 다음 큰 숫자
- CompositionAPI
- 정수형으로 변환
- SpringSecurity
- for
- vue.js
- 맥 error
- 타임리프
- Total
- Today
- Yesterday