본문 바로가기
개발 일지/RestAPI

[RestAPI] ResponseEntity<T> , @ResponseBody 로 응답 HTTP 다루기

by osul_world 2022. 1. 19.
728x90

[RestAPI] ResponseEntity , @ResponseBody 로 응답 HTTP 다루기


 

상태코드와 HTTP header 스펙에 대해서 대략 알아보았으니 Spring에서 응답 데이터를 생성하는 법을 알아보자

 

Spring에서 restAPI를 개발할때 HTTP 응답을 다루는 방법이 2가지 있다.

ResponseEntity 클래스 사용 혹은 @ResponseBody 에너테이션 사용

 

 

@ResponseBody

@ResponseBodyHTTP 규격에 맞는 응답을 만들어주기 위한 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 를 상속받은 RequestEntityResponseEntity 클래스가 존재한다.

상태코드 + HTTP body + HTTP header를 모두 다뤄야 하는 경우 사용할수있다.

 

정리

ResponseEntity를 사용: 상태코드 + HTTP body + HTTP header를 모두 다뤄야 하는 경우

@ResponseBody를 사용: HTTP body에 담긴 데이터만 다루는 경우

 

 

Reference


https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html

https://tecoble.techcourse.co.kr/post/2021-05-10-response-entity/

728x90