반응형
말 그대로 "응답 독립체", 사실 독립체라는 말이 어색해서 그렇지 응답 자체의 독립된 값이나 표현 형태라고 생각하면 된다.
Spring Framework에서 제공하는 클래스인 HttpEntity<T>를 상속받고 있으며, RestTemplate 및 @Controller 메서드에 사용하고 있다.
또란 HttpEntity 클래스는 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다.
public class HttpEntity<T> {
public static final HttpEntity<?> EMPTY = new HttpEntity();
private final HttpHeaders headers;
private final T body;
...
}
HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다. 따라서 ResponseEntity는 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스이다. 따라서 HttpStatus, HttpHeaders, HttpBody를 포함한다.
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();
Spring MVC의 @Controller 메소드를 사용할 때에는 아래와 같이 사용 가능하다.
@RequestMapping("/handle")
public ResponseEntity<String> handle() {
URI location = ...;
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setLocation(location);
responseHeaders.set("MyResponseHeader", "MyValue");
return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}
ResponseEntity 객체 자체를 리턴 밸류로 두는 것이다.
아니면 Builder 패턴으로도 사용 가능하다.
@RequestMapping("/handle")
public ResponseEntity<String> handle()
{
URI location = ...;
return ResponseEntity.created(location).header("MyResponseHeader", "MyValue").body("Hello World");
}
ResponseEntity는 StatusField를 가지고 있기 때문에 상태코드는 필수적으로 포함해줘야 한다.
참고:
devlog-wjdrbs96.tistory.com/182
반응형
'Spring > Spring Web MVC' 카테고리의 다른 글
Apache2와 httpd (0) | 2021.06.09 |
---|---|
HttpMessageConverters (0) | 2021.03.28 |
URI 패턴 (1) | 2021.03.03 |
Spring RestTemplate (0) | 2021.02.25 |
RESTful API (0) | 2021.02.25 |