今天將實作 Comment API 的建立細節,建立的方式跟 Post 一樣,同樣需要 Service, Controller, Entity 之間的串接。
在 payload package 建立 CommentDto.java
跟 Postman client 間進行交流,定義所有的欄位內容
@Data
public class CommentDto {
private long id;
private String name;
private String email;
private String body;
}
可以在 entity package 中 Comment.java
Comment 的 API 跟 Post API 的處理很相像,都有 GET, POST, PUT, DELETE,而 Status code 則可以分為 200 (ok),
201 (created)
在 Service package 中建立 CommentService.java 的 interface
在 Service impl 中建立 CommentServiceImpl.java 的 class,用來 implement CommentService
Service 的 class 同樣需要 mapToEntity 等功能
@Override
public class CommentServiceImpl implements CommentService {
private CommentRepository commentRespository;
private PostRepository postRepository;
public CommentServiceImpl (CommentRepository commentRepository){
this.commentRepository = commentRepository;
}
@Override
public CommentDto createComment(long postId, CommentDto commentDto){
Comment comment = mapToEntity(commentDto);
Post post = postRepository.findById(postId).orElseThrow(() -> new ResourceNotFoundExceptiom("Post","id",postId));
comment.setPost(post);
Comment newComment = commentRepository.save(comment);
return mapToEntity(newComment);
}
private CommentDto mapToDTO(Comment comment){
CommentDto commentDto = new CommentDto();
CommentDto.setId(comment.getId());
CommentDto.setName(comment.getName());
CommentDto.setEmail(comment.getEmail());
CommentDto.setBody(comment.getBody());
return commentDto;
}
在 Controller 中建立 CommentController.java 去作 API URL 的路徑設定以及功能的實現,除此之外也可以處理或是接收 HTTP 回傳的 code
@POstMapping("/posts/{postId}/comments")
public RepositoryEntity<CommentDto> createComment(@ParthVariable(value="postId" long postId,
@RequestBody CommentDto commentDto){
return new ResponseEntity<>(commentService.createComment(postId,commentDto), HttpStatus.CREATED);
以上是 Comment API 的部分實作,接下來會在描述接下來的步驟~
謝謝大家的觀看~
明天見~