httpEntity 를 상속받는 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스
'HTTP 상태 코드(에러 코드 같은) + 전송하고 싶은 데이터' 를 함께 전송
다음의 3가지를 포함하는 구조
HttpStatus
상태코드HttpHeaders
헤더값HttpBody
결과값프론트엔드와의 협업
백엔드에서 이뤄지는 처리 및 그 결과들은 백엔드 간에는 구별 가능하지만,
프론트엔드와 협업을 하면서 프론트엔드는 백엔드 간에 구별가능한 상태 코드 등... 을 바로 알아보기가 어려울 수 있다.
→ ResponseEntity 는 프론트와 백의 원활한 소통을 위해 사용되는 일종의 '공통 규격' 인 것
@ResponseBody 와 @RestController 의 단점을 보완해준다.
@Controller 과 @RestController 어노테이션을 사용하면서, 해당 controller 클래스에 ResponseEntity 를 사용하는 것에 대해 정리해두었다.
참고: @Controller vs @RestController (+ ResponseEntity 사용하기)
String 내부에서 ResponseEntity 객체가 구현돼 있으므로 그대로 사용 가능
body 와 header 에는 null 이 들어올 수 있다.
(= status값만 넣어도, body 와 header 에(ResponseEntity의 나머지 값)는 null 이 들어가면 된다.)
// this : this를 통해 세 개의 매개변수가 있는 생성자를 호출
public ResponseEntity(HttpStatus status) {
this(null, null, status);
}
ResponseEntity 를 사용할 때, Constructor 를 사용하기보다는 Builder 를 활용하는 것을 권장한다.
Why?
숫자로 된 상태 코드를 넣을 때 잘못된 숫자를 넣을 수도 있기 때문이다.
return new ResponseEntity<MoveResponseDto>(moveResponseDto, headers, HttpStatus.valueOf(200));
return ResponseEntity.ok()
.headers(headers)
.body(moveResponseDto);
Builder Pattern 을 활용하면
각 상태에 매칭되는 숫자 코드를 외울 필요 없이, Builder 메소드를 선택하면 된다.
참고: ResponseEntity란 - 개념, 구조, 사용법, 사용하는 이유
참고: ResponseEntity - Spring Boot에서 Response를 만들자
참고: ResponseEntity란?
참고: [Spring Boot] ResponseEntity란 무엇인가?