ResponseEntity란?
ResponseEntity<T>는 HttpEntity<T>를 상속받고 있어, HttpEntity에다 HttpStatusCode를 추가한 클래스이다. HttpEntity는 HTTP 요청 또는 응답 entity인데, header와 body로 구성되어 있다. ResponseEntity class 문서에서 생성자는 다음과 같다.
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatusCode statusCode) {
super(body, headers);
Assert.notNull(statusCode, "HttpStatusCode must not be null");
this.status = statusCode;
}
정리하자면, ResponseEntity에 총 3가지 인자(정보)가 담길 수 있다.
- body : json, html 등의 구체적인 데이터를 담는 곳
- header : 요청에 대한 접속 운영체제, 인증 정보 등의 부가 정보를 담는 곳
- HttpStatusCode : HTTP 응답 상태 코드를 알려줄 데이터를 담는 곳
RestController에서 ResponseEntity 사용
Spring Boot 프로젝트에서 RestController를 통해 API를 구성할 때, ResponseEntity로 응답을 return하여 정보를 보내게 된다. 그런데 return이랑 ResponseEntity를 같이 사용할 때, new를 붙이는 경우와 붙이지 않는 경우가 있다.
// Case 1
public ResponseEntity<ApiResponseMessage> helloWorld() {
ApiResponseMessage message = new ApiResponseMessage("Success", "Hello, World", "", "");
return new ResponseEntity<ApiResponseMessage>(message, HttpStatus.OK);
}
// Case 2
public ResponseEntity<ApiResponseMessage> helloWorld() {
ApiResponseMessage message = new ApiResponseMessage("Success", "Hello, World", "", "");
return ResponseEntity.status(HttpStatus.OK).body(message);
}
두 case 모두 똑같은 역할을 하는 코드지만, case 1에는 new가 있고, case 2는 new가 없다. 이는 두 코드에서 약간 다른 방식으로 return하고 있기 때문이다.
case 1
ResponseEntity에 인자를 담아 바로 return한다. ResponseEntity 자체는 일반적인 class이므로, 객체를 만들기 위해 new로 class의 인스턴스화가 필요하다.
case 2
ResponseEntity.status()를 return한다. status()는 공식문서에
public static ResponseEntity.BodyBuilder status(HttpStatusCode status)
라고 되어 있는데, static 으로 정의돼 있다. 정적 메서드는 인스턴스가 아닌 클래스에 관계된 것이기 때문에 인스턴스를 생성하지 않고 사용한다. 즉, new를 붙이지 않는다.
'TIL : JAVA' 카테고리의 다른 글
[Java] Long과 long의 차이 (0) | 2024.09.15 |
---|---|
[Java] 선형 검색 Linear Search (0) | 2024.05.02 |
[Java] Static, Heap, Stack 메모리 (0) | 2024.04.25 |
JDBC 로 MySQL 연결하기 (0) | 2024.03.30 |
JDBC 기초 (0) | 2024.03.28 |