조컴퓨터

ResponseEntity 본문

공부/Spring

ResponseEntity

챠오위 2022. 1. 29. 14:36

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)

 

ResponseEntity - Spring Boot에서 Response를 만들자

웹 서비스에서는 많은 정보를 송수신하게 됩니다. 각각의 다른 웹 서비스들이 대화하려면, 서로 정해진 약속에 맞게 데이터를 가공해서 보내야합니다. 보내는 요청 및 데이터의 형식을 우리는 H

tecoble.techcourse.co.kr

2. 자바 [JAVA] - 제네릭(Generic)의 이해 (tistory.com)

 

자바 [JAVA] - 제네릭(Generic)의 이해

정적언어(C, C++, C#, Java)을 다뤄보신 분이라면 제네릭(Generic)에 대해 잘 알지는 못하더라도 한 번쯤은 들어봤을 것이다. 특히 자료구조 같이 구조체를 직접 만들어 사용할 때 많이 쓰이기도 하고

st-lab.tistory.com