ResponseEntity<T>

Kkd·2025년 2월 26일
0

매일메일 개념정리

목록 보기
90/93

ResponseEntity<T>란? 🚀

1. ResponseEntity<T> 개요

ResponseEntity<T>Spring Framework에서 HTTP 응답을 생성하고 관리하기 위한 클래스입니다.
HTTP 상태 코드, 헤더, 바디를 포함한 응답을 구성할 수 있도록 제공됩니다.

Spring의 @RestController에서 API 응답을 반환할 때 사용
HTTP 응답 상태 코드(HttpStatus), 헤더(HttpHeaders), 바디(T) 포함 가능
REST API에서 클라이언트에게 적절한 응답을 반환하는 데 유용

📌 ResponseEntity<T>를 사용하면 HTTP 응답을 세밀하게 제어할 수 있음!


2. ResponseEntity<T>의 주요 필드

public class ResponseEntity<T> extends HttpEntity<T> {
    private final HttpStatusCode status; // HTTP 상태 코드
}

ResponseEntity<T>의 주요 구성 요소

1️⃣ HTTP 상태 코드 (HttpStatusCode)

  • HttpStatus.OK (200), HttpStatus.NOT_FOUND (404)
  • API 응답의 상태를 명확하게 표현할 수 있음

2️⃣ HTTP 헤더 (HttpHeaders)

  • Content-Type, Cache-Control, Location 등 설정 가능

3️⃣ 바디 (T)

  • JSON 데이터, 문자열, 객체 등 원하는 응답 본문을 포함 가능

📌 HttpEntity<T>를 확장하여 응답을 더 세부적으로 설정 가능!


3. ResponseEntity<T> 사용 예제

1) 기본적인 ResponseEntity 사용 (HTTP 상태 코드 포함)

import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ExampleController {

    @GetMapping("/hello")
    public ResponseEntity<String> hello() {
        return new ResponseEntity<>("Hello, World!", HttpStatus.OK);
    }
}

📌 설명

  • ResponseEntity<>("Hello, World!", HttpStatus.OK) → 응답 본문 "Hello, World!" + 상태 코드 200 OK 반환
  • 클라이언트는 200 OK 상태 코드와 함께 응답을 받게 됨

2) ResponseEntity.ok() 사용 (간결한 코드)

@GetMapping("/greet")
public ResponseEntity<String> greet() {
    return ResponseEntity.ok("Hello, Spring!");
}

📌 설명

  • ResponseEntity.ok("Hello, Spring!") → 응답 본문 "Hello, Spring!" + 200 OK

3) ResponseEntity.notFound() 사용 (404 응답)

@GetMapping("/user/{id}")
public ResponseEntity<String> getUser(@PathVariable int id) {
    if (id == 1) {
        return ResponseEntity.ok("User Found");
    } else {
        return ResponseEntity.notFound().build(); // 404 Not Found
    }
}

📌 설명

  • notFound().build()HTTP 404 Not Found 상태 코드 반환

4) ResponseEntity로 JSON 응답 반환

@GetMapping("/json")
public ResponseEntity<User> getUser() {
    User user = new User(1, "Alice");
    return ResponseEntity.ok(user);
}

static class User {
    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // Getter & Setter
}

📌 설명

  • ResponseEntity.ok(user) → JSON 형태로 객체 반환
  • 클라이언트는 {"id":1, "name":"Alice"} 형태의 JSON 응답을 받음

5) ResponseEntity로 헤더 설정

@GetMapping("/custom-header")
public ResponseEntity<String> customHeader() {
    return ResponseEntity.ok()
            .header("Custom-Header", "HelloHeader")
            .body("Header included!");
}

📌 설명

  • header("Custom-Header", "HelloHeader") → 응답 헤더에 사용자 정의 값 추가
  • 클라이언트는 응답 헤더에서 "Custom-Header": "HelloHeader" 를 확인 가능

6) ResponseEntity201 Created 응답 반환

@PostMapping("/create")
public ResponseEntity<String> createUser(@RequestBody User user) {
    URI location = URI.create("/users/" + user.getId()); // 생성된 리소스 경로
    return ResponseEntity.created(location).body("User Created!");
}

📌 설명

  • ResponseEntity.created(location).body("User Created!")201 Created + Location 헤더 포함

4. ResponseEntity<T>의 주요 정적 메서드

메서드설명
ok(T body)HTTP 200 OK 응답 반환
created(URI location)HTTP 201 Created 응답 반환
accepted()HTTP 202 Accepted 응답 반환
noContent()HTTP 204 No Content 응답 반환
badRequest()HTTP 400 Bad Request 응답 반환
notFound()HTTP 404 Not Found 응답 반환
unprocessableEntity()HTTP 422 Unprocessable Entity 응답 반환
internalServerError()HTTP 500 Internal Server Error 응답 반환

📌 정적 메서드를 사용하면 더 가독성이 좋은 코드 작성 가능!


5. ResponseEntity<T> vs @ResponseBody 차이

비교 항목ResponseEntity<T>@ResponseBody
응답 데이터 포함 여부✅ 가능 (Body 포함)✅ 가능
HTTP 상태 코드 설정✅ 가능 (HttpStatus 지정 가능)❌ 항상 200 OK
HTTP 헤더 설정✅ 가능 (HttpHeaders 설정 가능)❌ 불가능
사용 방식명시적(ResponseEntity.ok(), badRequest())암묵적(기본적으로 200 OK)
추천 사용 사례다양한 HTTP 상태 코드 & 헤더 설정이 필요할 때단순한 JSON 응답 반환 시

📌 API 응답의 상태 코드 & 헤더를 직접 설정해야 할 경우 → ResponseEntity<T> 사용!


6. 결론

ResponseEntity<T>는 Spring에서 HTTP 응답을 제어하는 강력한 클래스
상태 코드(HttpStatus), 헤더(HttpHeaders), 바디(T)를 포함하여 응답 가능
REST API 개발에서 다양한 HTTP 응답을 반환할 때 매우 유용함
정적 메서드 (ok(), notFound(), created())를 활용하면 더 가독성 높은 코드 작성 가능


추가 학습 자료

profile
🌱

0개의 댓글