일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 책리뷰
- 주간회고
- Python
- Til
- 스터디
- 함수형 코딩
- jsp
- 서평
- 회고
- 코드숨
- 필기
- If
- 뇌정리
- 정보처리기사
- 2020년 제4회 정보처리기사 필기 문제 분석
- 미니프로젝트
- Real MySQL
- 항해99
- LeetCode
- sqldeveloper
- hackerrank
- 2020년 일정
- 2020년 정보처리기사 4회
- algorithms
- git
- post
- Jackson
- 성적프로그램
- 알고리즘
- java
- Today
- Total
조컴퓨터
ResponseEntity 본문
ResponseEntity 란?
Spring Framework 에서 제공하는 클래스 중 HttpEntity 라는 클래스가 존재한다. 이것은 HTTP 요청(Request) 또는 응답(Response) 에 해당하는 HttpHeader 와 HttpBody 를 포함하는 클래스이다.
public class RequestEntity<T> extends HttpEntity<T>
public class ResponseEntity<T> extends HttpEntity<T>
HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity 와 ResponseEntity 클래스이다. ResponseEntity 는 HttpStatus, HttpHeaders, HttpBody 의 전체 HTTP 응답을 나타낸다.
ResponseEntity 의 구조를 보면, 다음과 같이 Status 만 필드 값으로 가지고 있다.
public class ResponseEntity<T> extends HttpEntity<T> {
private final Object status;
}
이는 ResponseEntity 에서 직접적으로 Status Code 를 지정할 수 있다는 것을 의미한다. 나머지 부분은 HttpEntity 에 구현이 되어 있는데, 이는 RequstEntity 와 여러 설정들을 공유하기 때문이다. 다음은 HttpEntity 의 구현 부분이다.
public class HttpEntity<T> {
/**
* The empty {@code HttpEntity}, with no body or headers.
*/
public static final HttpEntity<?> EMPTY = new HttpEntity<>();
private final HttpHeaders headers;
@Nullable
private final T body;
}
이와 같이 ResponseEntity 는 HttpEntity 를 상속하여 구현이 된다. HttpEntity 에서는 Generic 타입으로 Body 가 될 필드값을 가질 수가 있다. Generic 타입으로 인하여 바깥에서 Wrapping 될 타입을 지정할 수가 있다. Wrapping 된 객체들은 자동으로 HTTP 규격에서 Body 에 들어갈 수 있도록 변환이 된다. 또한, 필드 타입으로 HttpHeaders 를 가지고 있는데, 이는 ResponseBody 와 다르게 객체 안에서 Header 를 설정해 줄 수 있음을 암시한다.
@GetMapping("/response-body-string-v2")
public ResponseEntity<String> responseBodyV2() {
return new ResponseEntity<>("ok", HttpStatus.OK);
}
@GetMapping("/response-body-json-v1")
public ResponseEntity<HelloData> responseBodyJsonV1() {
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(20);
return new ResponseEntity<>(helloData, HttpStatus.OK);
}
Spring 에서 다음과 같이 HTTP 응답으로 반환할 메서드를 만들게 되었다. 이때, 타입은 ResponseEntity<반환할 타입> 으로 지정한다.
참고)
1. ResponseEntity - Spring Boot에서 Response를 만들자 (techcourse.co.kr)
2. 자바 [JAVA] - 제네릭(Generic)의 이해 (tistory.com)
'공부 > Spring' 카테고리의 다른 글
프로젝트 생성과 로깅, 요청 매핑 (0) | 2022.01.28 |
---|---|
#스프링 MVC - 구조 이해 (0) | 2022.01.27 |
#MVC 프레임워크 만들기 - 유연한 컨트롤러 - v5 (0) | 2022.01.27 |
#MVC 프레임워크 만들기 - v1, v2, v3, v4 (0) | 2022.01.27 |
MVC 패턴 (0) | 2022.01.26 |