ResponseEntity는 무엇이며, 왜 사용하는 것일까?
: Spring Framework에서 제공하는 클래스 중에 HttpEntity라는 클래스가 존재하는데, 이는 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader, HttpStatus를 포함하는 클래스이다.
이 HttpEntity 클래스를 상속받아 구현한 클래스가 ResponseEntity이다.
즉, 사용자의 HttpRequest(요청)에 대한 응답 데이터를 포함하는 클래스이며, 상태값(status), 헤더(header), 응답데이터(responsedata)에 대한 정의가 가능하다.
아래 예제 코드는 Response라는 공용 class를 정의하고, API에 대한 return Class를 ResponseEntity로 정의하였다.
ResponseEntity안에는 HttpHeaders, HttpStatus의 객체를 사용하여 ResponseEntity에 담아서 응답값을 세팅한 모습이다.
package common;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
public class Response {
public static ResponseEntity<Map> resultOk() {
Map<String, Object> responseData = new HashMap<>();
responseData.put("code", "1");
responseData.put("message", "OK");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
return new ResponseEntity<>(responseData, headers, HttpStatus.OK);
}
}
= builder pattern을 응용한 ResponseEntity 정의방법
package common;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
public class Test {
public ResponseEntity<Map> responseTest() {
Map<String, Object> responseData = new HashMap<>();
responseData.put("code", "1");
responseData.put("message", "OK");
// builder pattern이 사용된 방법이다.
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(responseData);
}
}
<ResponseEntity Usable Method>
<BodyBuilder Usable Method>
위의 그림과 같이 builder를 구현해주는 BodyBuilder를 받는다.
- 간단하게 200: ok(), 404: notFound(), 400: badRequest() 등 상태값을 정의할 수 있다.
- BodyBuilder 뒤에서부터는 header값 제어와 body data를 입력해줄 수 있다. (BodyBuilder가 반복되며 필요 정보를 Setting 할 수 있음)
= ResponseEntity Class Method 문서 참조
'SpringFramework > Spring' 카테고리의 다른 글
Spring - Swagger (0) | 2021.10.08 |
---|---|
Spring - RestTemplate (0) | 2021.10.08 |
Spring - Mybatis FrameWork 개념 및 설정 (0) | 2021.09.30 |
Spring Package 구조와 역할 (0) | 2021.09.30 |
Jenkins를 이용한 서버 Spring Boot 배포 - pipeline (0) | 2021.09.15 |