
들어가기
Spring에서 비동기 통신을 위해 주로 Controller에서 사용하는 어노테이션 @RequestBody, @ResponseBody에 대해서 알아보자.
@RequestBody
클라이언트가 서버로 보내는 JSON 형식의 HTTP Body를 자바 객체로 변환하는 역할을 한다.
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class AddArticleRequest {
private String title;
private String content;
}
@RestController
@RequiredArgsConstructor
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).body(savedArticle);
}
}

위 코드에서 Postman(클라이언트 요청을 위해 사용)을 이용해서 위 캡처와 같이 요청을 보내면 AddArticleRequest 타입의 자바 객체가 생성된다.
@ResponseBody
서버가 클라이언트로 보내려는 자바 객체를 JSON 형식의 HTTP Body로 변환하는 역할을 한다.
@RequiredArgsConstructor
@RestController
// @ResponseBody -> @RestController에 포함되어 있음.
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);
}
}

@RestController는 @ResponseBody 어노테이션을 포함하고 있다. 그래서 따로 선언해주지 않아도 위 캡처와 같이 자바 객체를 JSON 형식의 HTTP Body로 변환하는 것을 확인할 수 있다.