[Spring]Chapter6.블로그기획 및 API 생성

공부기록·2023년 11월 10일
0
post-thumbnail

기록용


🪜게시물 추가 API 中


AddArticleRequest.java

@NoArgsConstructor
@AllArgsConstructor
@Getter
public class AddArticleRequest {
    private String title;
    private String content;

    //DTO를 엔티티로 만들어주는 메서드
    public Article toEntity(){
        return Article.builder()
                .title(title)
                .content(content)
                .build();
    }
}
  • DTO란?
    • Http에서 들어오는 형식은 주로 Json형태이다. Spring에서 이용하려면 자바 객체로의 변환이 필요하므로 생성하는 class인 것이다. 각 요청마다 필요한 class를 만든다.



🪜JpaRepository


  • CrudRepository 인터페이스를 상속받아 CRUD 메소드를 제공한다.
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    
    @Override
    List<T> findAll();

    // ID 값을 리스트 형식으로 받아 레코드 조회
    @Override
    List<T> findAllById(Iterable<ID> ids);

	@Override
    void save(T entity);
    ..
}



🪜@PostMapping


@RequiredArgsConstructor
@RestController
public class BlogApiController {
    private final BlogService blogService;

    @PostMapping("/api/articles")
    public ResponseEntity<Article> addArticle(@RequestBody AddArticleRequest request){
        Article savedArticle = blogService.save(request);
        return ResponseEntity.status(HttpStatus.CREATED)
}

ResponseEntity란?

  • HttpRequest에 대한 응답 데이터를 포함하는 클래스이다.
  • HttpStatus, HttpHeaders, HttpBody를 포함한다.



🪜Stream이란?


  • Collection으로 구성된 데이터를 간편하게 처리하기 위한 기능으로 람다식과 함께 사용되면 매우 간결하게 작성이 가능해진다.
  • map(dto::new)
    • 데이터 변형을 위하여 사용된다.
public class BlogApiController {
	private final BlogService blogService;
    
    --생략--
    
    @GetMapping("/api/articles")
    public ResponseEntity<List<ArticleResponse>> findAllArticles() {
        List<ArticleResponse> articles = blogService.findAll()
                .stream()
                .map(ArticleResponse::new)
                .toList();

        return ResponseEntity.ok()
                .body(articles);
  • 클라이언트로 보낼 데이터로 모든 게시글을 내보내기 위하여 보내는 객체는 List<ArticleRespone>로 미리 만들어 놓은 dto 형식으로 Body에 넣어 보내진다.
  • Service에서 가져온 객체들은 stream으로 컬렉션(List)에 존재하는 요소들을 하나씩 참조하여 람다식으로 처리할 수 있도록 하고 map을 통하여 ArticleResponse라는 새로운 객체를 생성한다.
  • 생성된 객체들은 .toList()에 따라 List 형태로 만들어진다.



@Transaction


  • 데이터베이스의 데이터를 바꾸기위해 묶은 작업의 단위이다.

commit

  • 하나의 트랜잭션이 성공적으로 끝났음을 알려주는 연산으로 로그에 저장된다.
  • 트랜잭션 단위로 Rollback 가능.



0개의 댓글

관련 채용 정보