이숭간 공부기록

[Springboot] ResponseEntity, HttpEntity란? 본문

공부공부/Spring Boot

[Springboot] ResponseEntity, HttpEntity란?

이숭간 2021. 7. 1. 17:26
728x90

Class ResponseEnitty<T>

응답자체의 독립된 값이나 표현형태로, 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스이다.

따라서 HttpStatus, HttpHeaders, HttpBody를 포함한다.

 

Spring Framework에서 제공하는 클래스인 HttpEnityt<T>를 상속받으며, RestTemplate(서버와 서버간 통신을 쉽게해줌) 및 @Controller메서드에 사용하고 있다.

 

RestTemplate에서의 사용예

getForEntity()와 exchange() 메서드의 응답객체로도 사용한다.

ResponseEntity<String> entity = template.getForEntity("https://example.com", String.class);
 String body = entity.getBody();
 MediaType contentType = entity.getHeaders().getContentType();
 HttpStatus statusCode = entity.getStatusCode();

Controller에서의 사용예 

메서드의 리턴밸류로 객체자체를 사용한다.

# 헤더는 명시하지 않은 코드
return new ResponseEntity<>(
                ApiResponse.response(
                        HttpStatusCode.OK,
                        HttpResponseMessage.GET_SUCCESS,
                        responseDto), HttpStatus.OK
        );

 

Class HttpEntity<T>

Represents an HTTP request or response entity, consisting of headers and body.
 *
 * <p>Typically used in combination with the {@link org.springframework.web.client.RestTemplate},
 * like so:
 * <pre class="code">
 * HttpHeaders headers = new HttpHeaders();
 * headers.setContentType(MediaType.TEXT_PLAIN);
 * HttpEntity&lt;String&gt; entity = new HttpEntity&lt;String&gt;(helloWorld, headers);
 * URI location = template.postForLocation("https://example.com", entity);
 * </pre>
 * or
 * <pre class="code">
 * HttpEntity&lt;String&gt; entity = template.getForEntity("https://example.com", String.class);
 * String body = entity.getBody();
 * MediaType contentType = entity.getHeaders().getContentType();
 * </pre>
 * Can also be used in Spring MVC, as a return value from a @Controller method:
 * <pre class="code">
 * &#64;RequestMapping("/handle")
 * public HttpEntity&lt;String&gt; handle() {
 *   HttpHeaders responseHeaders = new HttpHeaders();
 *   responseHeaders.set("MyResponseHeader", "MyValue");
 *   return new HttpEntity&lt;String&gt;("Hello World", responseHeaders);
 * }
 * </pre>

HttpEntity클래스는 HTTP요청또는 응답에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스다.

따라서 이 클래스는 다음과같은 생성자와 필드를 갖는다.

public class HttpEntity<T> {
    public static final HttpEntity<?> EMPTY = new HttpEntity();
    private final HttpHeaders headers;
    private final T body;
    ...
}

 

HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다. 

 

참고 :

https://bimmm.tistory.com/34