ResponseEntity란?
Spring Framework에서 제공하는 ResponseEntity는 HttpEntity를 상속(확장)하여 headers와 body를 포함하고, 추가로 HttpStatus 코드까지 함께 추가할 수 있는 클래스로, REST 컨트롤러 혹은 일반 컨트롤러에서 응답하는 객체로서 사용된다.
HttpEntity는 header와 body로 구성되어 Http 요청 혹은 응답 Entity로서 사용되는 클래스이다. (참고문서)
결론은! Http 요청에 응답 Entity로 사용될 수 있는 클래스이다.
문서의 생성자 설명 부분을 보면 Body, Headers, Status를 지정할 수 있다. (참고 문서)
예시
Controller에서 응답 객체를 생성하는 역할을 하는 클래스로 ResponseJsonObject 를 생성하였다.
객체를 생성하는데에 필요한 틀을 만들어 주는 것인데, 필드로 응답 데이터를 담는 응답 데이터(data
)와 상태 데이터(meta
)를 가지고 있도록 하였다.
data
필드는 각 요청의 응답 요구사항에 따라 담길수도, 안담길 수도 있다. (null인 경우, 아예 필드가 전달되지 않도록 했다.)
meta
필드는 내부 클래스로 생성하였고 필드로 상태 타입(Enum 타입의 apiStatus
, 필수), 상태 코드(int 타입의 statusCode
), 에러 타입(errorType
, 선택), 에러 메시지(errorMsg
, 선택)를 가지도록 했다.
해당 ResponseJsonObject
객체를 ResponseEntity
클래스로 감싸서 최종 반환한다. 이때 HttpStatus
의 상태 코드가 추가될 수 있다.
감싸서 반환하는 Controller 클래스의 일부 코드를 보면 다음과 같다.
return new ResponseEntity<ResponseJsonObject>(resDto, HttpStatus.OK);
// ReponseJsonObject 객체와 HttpStatus 상태 코드를 함께 담아서 반환
위 코드에서 ResponseEntity를 생성하는데 이용되는 생성자는 아래 생성자이다.
결국 응답 객체 (ResponseJsonObject)와 HttpStatus 상태코드를 매개변수로 담아 생성한 ResponseEntity를 최종 응답으로 반환한다.
로그인 api 요청의 응답 객체 모습을 예로 들면 아래와 같이 응답이 이루어진다.
{
"meta":{
"code":200,
"type":"OK",
"message":"성공."
},
"data":{
"id":"testId",
"seq":12313,
"name":"tester"
}
}
[2022.10.08] ResponseEntity 클래스 생성 시 인자에 담을 body 데이터는 하나의 클래스로 따로 생성하는 것을 보여주려고 소개하였는데, ResponseJsonObject 클래스의 구성이나 변수명이 아쉬운 것 같다.
추가적인 질문 혹은 피드백은 환영입니다.
'백엔드 개발하며 작성한 > Spring' 카테고리의 다른 글
단위 테스트 코드 작성 (JUnit5) (1) | 2022.02.14 |
---|---|
Spring Boot와 S3 연결하기 (0) | 2022.02.07 |
JAP Query로 특정 칼럼의 count 쿼리문 실행하기 (0) | 2021.11.12 |
[Spring Boot 프로젝트] AWS EC2로 Spring Boot 배포 (0) | 2021.10.16 |
[Spring Boot] 테스트 코드 작성 (Hello World편) (0) | 2021.10.13 |