웹/Spring
스프링부트3 블로그 만들기 - 블로그 글 하나 조회 API 구현하기, 테스트 코드 작성
놀이방사장님
2023. 10. 15. 01:13
728x90
반응형
안녕하세요 놀이방 사장입니다.
이번 포스팅은 블로그 글 하나를 조회하는 API 구현입니다.
저번에는 모든 글을 조회하는 API구현이었다면 글하나도 조회해야죠
서비스 메서드 코드 작성
public Article findById(long id){
return blogRepository.findById(id)
.orElseThrow(()-> new IllegalArgumentException("not found" + id));
}
BlogService.java파일에서 블로그 글 하나를 조회하는 메서드 findById() 메서드를 추가
데이터베이스에 저장되어 있는 글의 id를 이용해 글을 조회
여기서 JPA에서 제공하는 findById() 메서드를 사용해 ID를 받아 엔티티를 조회하고 없으면 IllegalArgumentException예외를 발생
컨트롤러 메서드 코드 작성
@GetMapping("/api/articles/{id}")
public ResponseEntity<ArticleResponse> findArticle(@PathVariable long id){
Article article = blogService.findById(id);
return ResponseEntity.ok()
.body(new ArticleResponse(article));
}
@PathVariable
@PathVariable 애너테이션은 URL에서 값을 가져오는 애너테이션
EX) /api/articles/3 GET요청을 받으면 id에 3이 들어오고 이 값은 앞서 만든 서비스 클래스의 findById()메서드로 넘어가 3번 블로그 글을 찾는다.
테스트 코드 작성
Given | 블로그 글을 저장합니다. |
When | 저장한 블로그 글의 id값으로 API를 호출합니다. |
Then | 응답 코드가 200 OK이고, 반환받은 content와 title이 저장된 값이 같은지 확인합니다. |
@DisplayName("findArticle : find one posting")
@Test
public void findArticle() throws Exception{
//given
final String url = "/api/articles/{id}";
final String title = "title";
final String content = "content";
Article savedArticle = blogRepository.save(Article.builder()
.title(title)
.content(content)
.build());
//when
final ResultActions resultActions = mockMvc.perform(get(url, savedArticle.getId()));
//then
resultActions
.andExpect(status().isOk())
.andExpect(jsonPath("$.content").value(content))
.andExpect(jsonPath("$.title").value(title));
}
실행시키면
테스트 통과가 잘된다.
반응형