웹/Spring
스프링부트3 블로그 만들기 - 블로그 글 수정 API 구현하기
놀이방사장님
2023. 10. 17. 22:40
728x90
반응형
안녕하세요 놀이방 사장입니다.
이번 포스팅은 스프링부트3 블로그 만들기입니다.
이번에는 글 수정 API를 구현해보겠습니다.
먼저 Article파일에
public void update(String title, String content){
this.title = title;
this.content = content;
}
값을 수정하는 메서드를 작성해준다.
그 후 글 수정 요청을 받을 DTO를 작성해줍니다.
UpdateArticleRequest.java
package me.joyeonggyu.springbootdeveloper.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class UpdateArticleRequest {
private String title;
private String content;
}
DTO를 만들었으니 이제 서비스파일에
@Transactional
public Article update(long id, UpdateArticleRequest request){
Article article = blogRepository.findById(id)
.orElseThrow(()-> new IllegalArgumentException("not found:" + id));
article.update(request.getTitle() , request.getContent());
return article;
}
리포지터리를 이용하여 글을 수정하는 update메소드를 만든다.
@Transactional
이 애너테이션은 매칭한 메서드를 하나의 트랜잭션으로 묶는 역할을 한다.
스프링에서는 트랜잭션을 적용하기 위해 다른 작업을 할 필요없이 이 애너테이션을 사용하면 된다.
이제 update() 메서드는 엔티티의 필드 값이 바뀌면 중간에 에러가 발생해도 제대로 된 값 수정을 보장할 수 있게 됨
컨트롤러 작성하기
@PutMapping("/api/articles/{id}")
public ResponseEntity<Article> updateArticle(@PathVariable long id
, @RequestBody UpdateArticleRequest request){
Article updatedArticle = blogService.update(id, request);
return ResponseEntity.ok()
.body(updatedArticle);
}
"/api/articles/{id}"
위에 PUT요청이 오면 Request Body정보가 request로 넘어온다.
다시 서비스클래스인 update메서드에 id와 request를 넘겨준다.
응답값은 body에 담아 전송
실행테스트 해보기
POST MAN이용하
테스트 코드 작성하기
given | 블로그 글을 저장하고, 블로그 글 수정에 필요한 요청 객체를 만든다. |
When | Update API로 수정 요청을 보낸다. 요청타입은 JSON이며 given절에서 만든 객체를 요청 본문으로 함께 보낸다. |
Then | 응답코드가 200인지 확인 |
@DisplayName("Update API")
@Test
public void updateArticle() 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());
final String newTitle = "new_title";
final String newContent = "new_content";
UpdateArticleRequest request = new UpdateArticleRequest(newTitle, newContent);
//when
ResultActions result = mockMvc.perform(put(url, savedArticle.getId())
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(objectMapper.writeValueAsString(request)));
result.andExpect(status().isOk());
Article article = blogRepository.findById(savedArticle.getId()).get();
assertThat(article.getTitle()).isEqualTo(newTitle);
assertThat(article.getContent()).isEqualTo(newContent);
}
이렇게 해주면 수정 API도 완성입니다!
반응형