웹 프로그래밍/[ Spring Boot ]

[ SpringBoot ] 06. ResponseEntity에 관하여

kim.svadoz 2021. 10. 12. 16:58
반응형

ResponseEntity

먼저 Spring framework에 HttpEntity라는 클래스가 존재한다.

이 클래스는 HTTP 요청(request)이나 응답(response)에 해당하는 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>

RequestEntity와 ResponseEntity는 이렇게 HttpEntity 클래스를 상속받아 구현한 클래스이다.

ResponseEntity는 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스이다. 따라서, HttpStatus, HttpHeaders, HttpBody를 포함한다.

ResponseEntity의 생성자는 this()를 통해서 매개변수가 3개인 생성자로 들어간다.

public ResponseEntity(HttpStatus status) {
    this(null, null, status);
}
public ResponseEntity(@Nullable T body, HttpStatus status) {
    this(body, null, status);
}

또한 상태코드(Status), 헤더(headers), 응답데이터(ResponseData)를 담는 생성자도 존재한다.

public class ResponseEntity<T> extends HttpEntity<T> {
    public ResponseEntity(@Nullabe T body, @Nullable MultiValueMap<String, String> headers,
                         HttpStatus status) {
        super(body, headers);
        Assert.notNull(status, "HttpStatus must not be null");
        this.status = status;
    }
}

클라이언트에게 응답을 보내는 예제를 만들어보자.

@RestController
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserController {
    private final UserService userservice;

    @GetMapping("/api/user/{id}")
    public ResponseEntity<Message> findById(@PathVariable int id) {
        User user = userservice.findById(id);
        Message message = new Message();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(new MeidaType("application", "json", Charset.forName("UTF-8")));

        message.setStatus(StatusEnum.OK);
        message.setMessage("성공했어요");
        message.setData(user);

        return new ResponseEntity<>(message, headers, HttpStatus.OK);
    }
}

REST API 개발 시 ResponseEntity의 값(헤더, 상태코드)들을 적절히 활용해보자.

반응형