[Spring] ResponseEntity

Ogu·2023년 6월 26일
0

SpringBoot

목록 보기
15/17
post-thumbnail

ResponseEntity란?

Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다. 이것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다.

public class ResponseEntity<T> extends HttpEntity<T> {

	private final Object status;
	...
        <T> ResponseEntity<T> body(@Nullable T body);

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

ResponseEntity를 쓰는 이유

일반적으로 Controller에서 아래와 같이 객체를 Return 하면 HTTP 응답을 제어할 수가 없다.

@GetMapping("/")
public User getUser() {
    User user = userService.getUser();
    return user;
}

하지만 REST API로 만든다면 클라이언트와 서버 간의 통신에 필요한 정보를 제공해야 한다.

그럴 때 ResponseEntity를 사용한다면 적절한 상태 코드와 응답 헤더 및 응답 본문을 생성해 반환 값을 커스텀하여 클라이언트에 전달할 수 있다.

ResponseEntity 사용법

return은 생성자보다는 builder 패턴 사용

생성자 패턴

return new ResponseEntity(body, headers, HttpStatus.valueOf(200));

builder 패턴

return ResponseEntity.ok()
	.headers(headers)
	.body(body);

ResponseEntity.ok()는 정적 팩토리 메서드이다.

그리고 뒷부분을 메소드 체이닝으로 연결한 빌더 패턴을 사용하는 것이 의미가 더 직관적이고 유지보수에 좋다.

ResponseEntity 생성 방법

ResponseEntity를 생성하는 기본 방법은 status와 body를 이용해서 상태코드와 JSON으로 변환할 객체를 지정하는 것이다.

ResponseEntity.status(상태코드).body(객체)

200(OK) 응답 코드와 몸체 데이터를 생성할 경우 다음과 같이 ok() 메서드를 이용해서 생성할 수 있다.

ResponseEntity.ok(member)

만약 몸체 내용이 없다면 다음과 같이 body를 지정하지 않고 build()로 바로 생성한다.

ResponseEntity.status(HttpStatus.NOT_FOUND).build()

아래와 같이 ResponseEntity.created() 메서드에 Location 헤더로 전달한 URI를 전달할 수도 있다.

URI uri = URI.created("/api/members/", newMemberId);
return ResponseEntity.created(uri).build();

출처

profile
私はゲームと日本が好きなBackend Developer志望生のOguです🐤🐤

0개의 댓글