본문 바로가기
개발자 준비/Spring

Spring에서 json 통신을 다루기 ResponseEntity, @ResponseBody

by osul_world 2022. 1. 17.
728x90

ResponseEntity , @ResponseBody

Spring에서 json 통신을 다루는 두가지 방법이 있다.

 

1. ResponseEntity 클래스 사용  

2. @ResponseBody 에너테이션 사용

 

응답에 관련해서 설명하면서 요청도 부연 설명 하겠다.

 

@ResponseBody

@RequestMapping(value = "/message")
@ResponseBody
public Message get() {
    return new Message(penguinCounter.incrementAndGet() + " penguin!");
}

클래스에 @RestController를 붙이면 내부 메서드들에게 모두 @ResponseBody가 적용된다.

 

JAVA 객체나 String을 HttpMessageConverter를 이용해서 json으로 변환해서 응답하는데 쓰인다.

 

@RequestBody는 반대로 json 데이터를 JAVA 객체로 변환하는 역할을 한다.

 

header정보는 따로 다루지 않기 떄문에 서블릿으로 호출한 request나 response객체에서 변경해줘야하는 번거로움이 있다.

 

Http body에 담길 데이터만 다루는 경우 간편하게 사용할수있다.

 

 

ResponseEntity

@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란 클래스 를 제공한다.

 

HttpEntity 를 상속받은 RequestEntityResponseEntity 클래스

 

즉, 통신 HTTP 관련 header와 body의 값들을 하나의 객체로 저장 하는 것이 HttpEntity 클래스 객체라는 것이다.

 

request HTTP header + body를 하나의 객체로 저장하는것을 RequestEntity 클래스가 하고

 

response HTTP 관련해서는 ResponseEntity 클래스가 하는것이다.

 

Http header나 body에 담길 데이터를 모두 다뤄야하는경우 사용한다.

 

 

정리

Status, Content-Type and Cache등 HTTP header 데이터와 HTTP body에 담길 json 데이터를 함께 다뤄야하는경우 ResponseEntity를 사용하면 되고,

 

Http body에 담길 데이터만 다루는 경우 @ResponseBody를 사용하면 된다.

728x90