서비스
// id 로 댓글 찾기
CommentDto getCommentById(Long postId, Long commentId);
서비스 구현
@Override
public CommentDto getCommentById(Long postId, Long commentId) {
//ID 로 포스트 찾기 못찾을 경우 예외처리
Post post = postRepository.findById(postId).orElseThrow(() -> new ResourceNotFoundException("Post", "id", postId));
//ID 로 댓글 찾기 못찾을 경우 예외
Comment comment = commentRepository.findById(commentId).orElseThrow(() -> new ResourceNotFoundException("Comment", "id", commentId));
if(!comment.getPost().getId().equals(post.getId())) {
throw new BlogAPIException(HttpStatus.BAD_REQUEST, "해당 포스트의 댓글이 아닙니다.");
}
return mapToDTO(comment);
}
public class BlogAPIException extends RuntimeException {
private static final long serialVersionUID = 1L;
private HttpStatus status;
private String message;
public BlogAPIException(HttpStatus status, String message) {
this.status = status;
this.message = message;
}
public BlogAPIException(String message, HttpStatus status, String message1) {
super(message);
this.status = status;
this.message = message1;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public HttpStatus getStatus() {
return status;
}
public String getMessage() {
return message;
}
}
컨트롤러
@GetMapping("/posts/{postId}/comments/{commentId}")
public ResponseEntity<CommentDto> getCommentById(@PathVariable long postId, @PathVariable long commentId){
return new ResponseEntity<>(commentService.getCommentById(postId, commentId), HttpStatus.OK) ;
}
postId 3 에 댓글을 만들자