ResponseEntity

박영준·2023년 1월 14일
0

Spring

목록 보기
2/58

1. 정의

  • httpEntity 를 상속받는 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스

    • httpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스
    • 따라서, ResponseEntity 에는 사용자의 HttpRequest 에 대한 응답 데이터가 포함됨
  • 'HTTP 상태 코드(에러 코드 같은) + 전송하고 싶은 데이터' 를 함께 전송

    • 결과값, 상태코드, 헤더값을 모두 프론트에 넘겨줄 수 있음
  • 다음의 3가지를 포함하는 구조

    • HttpStatus 상태코드
    • HttpHeaders 헤더값
    • HttpBody 결과값
  • HTTP 아케텍쳐 형태에 맞게 Response 를 보내줌

프론트엔드와의 협업
백엔드에서 이뤄지는 처리 및 그 결과들은 백엔드 간에는 구별 가능하지만,
프론트엔드와 협업을 하면서 프론트엔드는 백엔드 간에 구별가능한 상태 코드 등... 을 바로 알아보기가 어려울 수 있다.
→ ResponseEntity 는 프론트와 백의 원활한 소통을 위해 사용되는 일종의 '공통 규격' 인 것

2. 장점

@ResponseBody 와 @RestController 의 단점을 보완해준다.

3. 사용법

1)

@Controller 과 @RestController 어노테이션을 사용하면서, 해당 controller 클래스에 ResponseEntity 를 사용하는 것에 대해 정리해두었다.

참고: @Controller vs @RestController (+ ResponseEntity 사용하기)

2) null 값

String 내부에서 ResponseEntity 객체가 구현돼 있으므로 그대로 사용 가능

body 와 header 에는 null 이 들어올 수 있다.
(= status값만 넣어도, body 와 header 에(ResponseEntity의 나머지 값)는 null 이 들어가면 된다.)

// this : this를 통해 세 개의 매개변수가 있는 생성자를 호출
public ResponseEntity(HttpStatus status) {
    this(null, null, status);
}

3) Constructor 보다는 Builder

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란 무엇인가?

profile
개발자로 거듭나기!

0개의 댓글