본문 바로가기

Tech/Spring | SpringBoot

[Spring] ResponseEntity

반응형

1. ResponseEntity

Spring 에서는 HttpEntity 라는 클래스를 제공한다. HttpEntity 는 HTTP 요청이나 응답에 사용되는 객체를 구현한 클래스로 HttpHeaders 와 HttpBody 를 포함하는 클래스이다. 이러한 HttpEntity 를 상속받아서 구현한 클래스가 ResponseEntity 와 RequestEntity 클래스이다. ResponseEntity 는 사용자의 HttpRequest 에 대한 응답 데이터를 포함하는 클래스이다. 그렇기 때문에 HttpEntity 로부터 상속받은 HttpHeaders, HttpBody 와 응답코드인 HttpStatus 를 포함한다.

 

ResponseEntity status code, headers, body 등과 같은 모든 HTTP 응답을 표현한다. Spring 에서는 end point 의 반환 타입으로 ResponseEntity 를 사용하여 HTTP 응답을 표현할 수 있다. ResponseEntity 는 generic type 이기 때문에 어떤 타입으로도 response body 를 작성할 수 있다.

- Reponse Entity 사용 예제

@GetMapping("a")
public ResponseEntity<String> getHello() {
	return new ResponseEntity<>("hello", HttpStatus.OK);
}

@GetMapping("b")
public ResponseEntity<String> getWithHeaders() {
    HttpHeaders headers = new HttpHeaders();
    headers.add("Custom-Header", "headers");
    return new ResponseEntity<>("with custom headers", headers, HttpStatus.OK);
}

@GetMapping("c")
public ResponseEntity<String> getHelloOk() {
	return ResponseEntity.ok("hello")
}

@GetMapping("d")
public ResponseEntity<String> getNotFound() {
	return ResponseEntity.notFound().build();
}

@GetMapping("e")
public ResponseEntity<String> getWithParams(@RequestParam String param) {
	return ResponseEntity.ok().body(param);
}

 

위의 예제는 Spring MVC Controller 에서 ResponseEntity 를 사용하여 HTTP Response 를 보내는 예제들이다.

기본적으로 ResponseEntity 클래스의 생성자를 사용하여서 header body 의 값들을 정의할 수 있다. 위의 예제에서 "a" "b" 요청에 대해서 각각 body 값과 status code, header 등을 사용하여 ResponseEntity 객체를 생성하고 이 결과를 반환하고 있다.

 

이외에도 ResponseEntity 는 builder 패턴을 제공하는데, HeadersBuilder 인터페이스와 BodyBuilder 인터페이스 기반의 builder 메서드를 제공한다. 각각의 메서드는 이름대로 HTTP Reponse 의 header 와 body 를 각각 정의할 수 있도록 해주는 메서드 인터페이스 들이다. 위의 예제에서 "e" 요청에 사용된 ok() 는 BodyBuilder, "d" 에서 사용된 notFound() 는 HeadersBuilder 인터페이스 타입의 메서드들이다. 이때 "c" 의 ok() 는 ResponseEntity 를 반환하는 메서드로 "e" 의 ok() 메서드와는 오버로딩 관계이기 때문에 잘 주의해서 사용하도록 한다.

- @ResponseBody

기본적으로 Spring MVC endpoint View, HTML 페이지를 렌더링하여 결과롤 반환한다. 그러나 때로는 페이지가 아닌 실제 데이터를 반환해야 하는 경우가 있다. 이 경우에 @ResponseBody 어노테이션을 사용할 수 있다. 해당 어노테이션을 request handler method 에 지정해주면 해당 메서드의 return 타입이 ResponseEntity 가 아니어도 메서드의 결과를 HTTP Response body 에 포함시켜서 반환한다.

- @ResponseStatus

request handler method 의 결과의 Response Status code 를 어노테이션을 추가하여 지정할 수 있다.

@ResponstStatus Http Status 를 지정해주면 해당 Status code 를 헤더에 추가한 response 를 반환한다. 이 방법은 주로 예외 처리 시에 많이 사용한다.

[Reference]

- https://www.baeldung.com/spring-response-entity

- https://devlog-wjdrbs96.tistory.com/182

 

[Spring Boot] ResponseEntity란 무엇인가?

먼저 REST API가 무엇인지는 아래 블로그를 먼저 잘 읽어보자. https://meetup.toast.com/posts/92 REST API 제대로 알고 사용하기 : TOAST Meetup REST API 제대로 알고 사용하기 meetup.toast.com 1. ResponseEntity란? Spring Fra

devlog-wjdrbs96.tistory.com

반응형