6.4 블로그 글 목록 조회 API 구현

SummerToday·2024년 2월 9일
1
post-thumbnail
post-custom-banner

서비스 메서드 구현

// service - BlogService.java

@RequiredArgsConstructor // 생성자 생성, 의존성 주입
@Service // 빈으로 등록
public class BlogService {
    private final BlogRepository blogRepository;

           ~ 생략 ~

    public List<Article> findAll(){  
        return blogRepository.findAll();
    }
}
  • findAll()을 호출해 article 테이블에 저장되어 있는 모든 데이터를 조회

컨트롤러 메서드 구현

  • 응답을 위한 DTO 작성

    // dto - ArticleResponse.java
    
    @Getter
    public class ArticleResponse {
    private final String title;
    private final String content;
    
    public ArticleResponse(Article article){
        this.title = article.getTitle();
        this.content = article.getContent();
      } 
    }

  • 컨트롤러 메서드 작성

    // controller - BlogApiController.java
    
    @RequiredArgsConstructor
    @RestController // HTTP Response Body에 객체 데이터를 JSON 형식으로 반환하는 컨트롤러
    public class BlogApiController {
    
      private final BlogService blogService;
    
      @GetMapping("/api/articles")
      public ResponseEntity<List<ArticleResponse>> findAllArticles() {
          List<ArticleResponse> articles = blogService.findAll()
                  .stream()
                  .map(ArticleResponse::new) // 스트림의 각 요소를 ArticleResponse 객체로 매핑.
                  .toList();
    
          return ResponseEntity.ok()
                  .body(articles);
      }
    }
    
    • findAll()
      Spring Data JPA에서 제공되는 메서드 중 하나로, 데이터베이스에서 모든 엔티티를 검색하는 메서드이다. 해당 리포지토리에 있는 모든 엔티티를 담은 List 형태로 반환한다. T는 엔티티 타입을 의미한다.

    • 200 ok로 상태 코드를 설정하여 ResponseEntity에 body에 articles 객체를 담아 반환.


실행 테스트

  • data.sql 작성
// resources - data.sql

INSERT INTO article (title, content) VALUES ('제목1', '내용1')
INSERT INTO article (title, content) VALUES ('제목2', '내용2')
INSERT INTO article (title, content) VALUES ('제목3', '내용3')
  • Postman을 통해 확인.

테스트 코드 작성

  • Given
    블로그 글을 저장.

  • WHEN
    목록 조회 API를 호출.

  • Then
    응답코드가 200 OK이고, 반환받은 값 중에 0번째 요소의 content와 title이 저장된 값과 같은지 확인한다.
// test - BlogApplicationTest.java

@DisplayName("findAllArticles: 블로그 글 목록 조회에 성공한다.")
   @Test
   public void findAllArticles() throws Exception {
       // given
       final String url = "/api/articles";
       final String title = "title";
       final String content = "content";

       blogRepository.save(Article.builder()
               .title(title)
               .content(content)
               .build());

       // when
       final ResultActions resultActions = mockMvc.perform(get(url)
               .accept(MediaType.APPLICATION_JSON));

       // then
       resultActions
               .andExpect(status().isOk())
               .andExpect(jsonPath("$[0].content").value(content))
               .andExpect(jsonPath("$[0].title").value(title));
   }
  • 해당 테스트 코드에 대한 설명은 '4.3 테스트 코드 작성' 게시물 참고.



해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽
profile
IT, 개발 관련 정보들을 기록하는 장소입니다.
post-custom-banner

0개의 댓글