728x90
    
    
  [RestAPI]  ResponseEntity , @ResponseBody 로 응답  HTTP 다루기 
상태코드와 HTTP header 스펙에 대해서 대략 알아보았으니 Spring에서 응답 데이터를 생성하는 법을 알아보자
Spring에서 restAPI를 개발할때 HTTP 응답을 다루는 방법이 2가지 있다.
ResponseEntity 클래스 사용
혹은@ResponseBody 에너테이션 사용
@ResponseBody
@ResponseBody 는 HTTP 규격에 맞는 응답을 만들어주기 위한 Annotation
@RequestMapping(value = "/message")
@ResponseBody
public Message get() {
    return new Message(penguinCounter.incrementAndGet() + " penguin!");
}
- 컨트롤러에 @RestController를 붙이면 내부 메서드들에게 자동으로 @ResponseBody가 적용된다.
 - JAVA 객체나 String을 HttpMessageConverter를 이용해서 json으로 변환해서 응답 HTTP body에 담아준다.
 - @RequestBody는 반대로 요청 HTTP body에 담겨온 json 데이터를 JAVA 객체로 변환하는 역할을 한다.
 - HTTP header 정보는 따로 다루지 않기 떄문에 서블릿으로 호출한 request나 response객체에서 따로 변경해줘야하는 번거로움이 있다.
 
HTTP body에 담긴 데이터만 다루는 경우 에너테이션을 사용해서 간단하게 사용할수있다.
ResponseEntity
HTTP body의 데이터만 다루는 @ResposeBody를 보완해서 상태코드 + HTTP body + HTTP header를 하나의 객체로 다루도록 해주는 클래스
@RequestMapping(value = "/message")
public ResponseEntity<Message> get() {
    Message message = new Message(penguinCounter.incrementAndGet() + " penguin!");
    return new ResponseEntity<Message>(message, HttpStatus.OK);
}
- 스프링은 Http 프로토콜을 이용하는 통신의 header와 body 관련 정보를 다루는기능을 지원하는 클래스 
HttpEntity란 클래스를 제공한다. 
즉, 통신 HTTP 관련
header와 body 값들을 하나의 객체로 저장하는 것이 HttpEntity 클래스 객체라는 것이다.
- 이 
HttpEntity를 상속받은RequestEntity와ResponseEntity클래스가 존재한다. 
상태코드 + HTTP body + HTTP header를 모두 다뤄야 하는 경우 사용할수있다.
정리
ResponseEntity를 사용: 상태코드 + HTTP body + HTTP header를 모두 다뤄야 하는 경우
@ResponseBody를 사용: HTTP body에 담긴 데이터만 다루는 경우
Reference
https://tecoble.techcourse.co.kr/post/2021-05-10-response-entity/
728x90
    
    
  '개발 일지 > RestAPI' 카테고리의 다른 글
| [RestAPI] CORS (Cross Origin Resource Sharing) (0) | 2022.01.19 | 
|---|---|
| [RestAPI] ResponseEntity<T> 자세히 알아보기 (feat. 상태코드) (0) | 2022.01.19 | 
| [RestAPI] HTTP 상태코드 (0) | 2022.01.19 | 
| [RestAPI] HTTP header (0) | 2022.01.19 | 
| [RestAPI] REST API (0) | 2022.01.19 |