💡 ResponseEntity란?
ResponseEntity란, httpentity를 상속받는, 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스이다.
ReponseEntity는 HttpEntity를 상속받고 사용자의 응답 데이터가 포함된 클래스이기 때문에 HttpStatus
, HttpHeaders
, HttpBody
를 포함한다.
public class ResponseEntity<T> extends HttpEntity<T> {
private final Object status;
<바디, 헤더, 상태코드> 순의 생성자가 만들어진다.
ex)
ResponseEntity<MoveResponseDto>(moveResponseDto, headers, HttpStatus.valueOf(200)); // ResponseEntity를 활용한 응답 생성
타입은 ResponseEntity<반환할 타입> 으로 지정한다.
Constructor 를 사용시에 Body 부분, Header 그리고 상태로 지정될 Status 를 차례로 입력하여 생성한다.
예시 코드에서는 moveResponseDto라는 객체가 Body 부분에 들어가서 응답으로 전송이 된다.
HTTP 응답에 필요한 요소들 중 대표적인 Status, Header , Body 를 지정하여 응답을 만들 수가 있다.
이렇게 ResponseEntity 를 사용할 때, Constructor 를 사용하기보다는 Builder 를 활용하는 것을 권장한다. 그 이유는 숫자로 된 상태 코드를 넣을 때, 잘못된 숫자를 넣을 수 있는 실수 때문이다. 따라서, Builder Pattern 를 활용하면 다음과 같이 코드를 변경할 수가 있다.
return ResponseEntity.ok()
.headers(headers)
.body(moveResponseDto);
public ResponseEntity getUser() {
위와 같이 메소드를 작성하면 ResponseEntity의 타입을 작성하지 않은 것이라 Object(모든 자바의 부모 클래스)를 Return으로 받는다.
위의 코드는 아래의 코드와 기능적으로 의미가 같다.
public ResponseEntity<Object> getUser() {
ResponseEntity의 타입은 명시하지 않으면 Object 타입을 Return 해준다.
다만 대부분의 상황에서는 유지보수를 위해 타입을 명시해 주는 것이 직관적이므로 좋다.