ResponseEntity?

강한친구·2022년 6월 22일
0

Spring

목록 보기
26/27
post-thumbnail

이게 뭐임?

RestController를 개발하다보면, 종종 method 반환을 responseEntity<>로 하는 코드들을 볼 수 있다.

Spring Framework에서는 HttpEntity라는 클래스를 제공한다. 이 zmffotmsms HttpHeader, HttpBody를 포함하고 있다.

public class HttpEntity<T> {

	private final HttpHeaders headers;

	@Nullable
	private final T body;
}

public class RequestEntity<T> extends HttpEntity<T>

public class ResponseEntity<T> extends HttpEntity<T>

HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다.
ResponseEntity는 사용자의 HttpRequest에 대한 응답 데이터를 포함하고 있다. 따라서 HttpStatus, HttpHeaders, HttpBody를 포함한다.

공식문서의 예시

@RequestMapping("/handle")
 public ResponseEntity<String> handle() {
   URI location = ...;
   HttpHeaders responseHeaders = new HttpHeaders();
   responseHeaders.setLocation(location);
   responseHeaders.set("MyResponseHeader", "MyValue");
   return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
 }

공식문서에서는 이를 MVC에서 다음과 같이 사용할 수 있다고 예시를 들고있다.

"Hello World"라는 간단한 String message와, Header정보 그리고 HttpStatus를 담아서 반환하고 있다.

다른 예시

	@RequestMapping(value = "/error-page/500", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Map<String, Object>> errorPage500Api
            (HttpServletRequest request, HttpServletResponse response) {
        log.info("API Error Page 500");

        Map <String, Object> result = new HashMap<>();

        Exception ex = (Exception)request.getAttribute(ERROR_EXCEPTION);
        result.put("status", request.getAttribute(ERROR_STATUS_CODE));
        result.put("message", ex.getMessage());

        Integer statusCode = (Integer) request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

        return new ResponseEntity<>(result, HttpStatus.valueOf(statusCode));
    }

BasicErrorPage로 구현한 500API 에러 예시 코드이다.

  1. ResponseEntity는 Map을 반환한다. 해당 맵은 String, Object를 가지는 해시맵이다.

  2. Map에는 request의 Error정보와, StatusCode가 들어간다.

  3. 그리고 최종적으로 ResponseEntity를 통해 result HashMap과 Status Code를 반환한다.

이를 실행시켜보면 다음과 같다.

JSON이 아닌 경우는 이렇게 나온다.

이는 JackSon라이브러리가 Map형태로 들어온 데이터를 Json형태로 변환하여 출력해주기 떄문이다.

결론

ResponseEntity는 결과적으로 ResponseEntity는 HttpHeader와 body를 가지고 이를 반환해주는데 사용되는 객체이다.

0개의 댓글