Stay Hungry Stay Foolish

자바/스프링

[스프링] @ResponseBody, ResponseEntity

dev스카이 2025. 7. 3. 15:28

@ResponseBody

이 어노테이션은 리턴값을 HTTP 응답 바디에 직접 넣겠다는 의미이다. 

 

사용 예시

@Controller
@ResponseBody
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, world!";
    }
}

 

@Controller만 사용한 경우

@Controller
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "hello"; // → templates/hello.html 같은 뷰를 찾음
    }
}
  • 스프링은 리턴값을 뷰(View)의 이름으로 처리한다.

 

📌 @ResponseBody를 @Controller와 같이 쓰면?

@Controller
@ResponseBody
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, world!"; // → 응답 본문에 "Hello, world!" 그대로 출력
    }
}
  • 리턴값을 그대로 HTTP 응답 본문(body)에 넣는다.
  • 텍스트, JSON, XML 등으로 응답할 수 있다.

 

✅ 정리

어노테이션 조합 동작 방식
@Controller 리턴값 -> 뷰 이름으로 처리
@Controller + @ResponseBody 리턴값 -> 응답 본문에 그대로 반환
@RestController 위 두 개를 합친 것, 모든 메서드에 @ResponseBody 적용

 


ResponseEntity

Spring에서 HTTP 응답을 세밀하게 제어할 수 있게 해주는 클래스이다. 단순히 데이터(String, JSON 등)만 반환하는게 아니라 상태 코드 + 헤더 + 바디까지 모두 직접 설정할 수 있다.

 

사용 예시

@GetMapping("/hello")
public ResponseEntity<String> hello() {
    return ResponseEntity.ok("Hello!");
}
  • 상태 코드를 바꾸고 싶다거나, 헤더도 넣고 싶을 때 사용한다.

 

주요 기능

기능 설명
상태 코드 지정 200, 201, 400 등 직접 설정 가능
응답 본문 String, JSON, 객체 등 다양하게 가능
응답 헤더 원하는 헤더 직접 설정 가능

 

 

📌 1. 단순 OK 응답

return ResponseEntity.ok("성공");
  • 상태코드 : 200 OK, 본문 : "성공"

📌 2. 상태 코드 변경 (예: 201 Created)

return ResponseEntity.status(HttpStatus.CREATED).body("생성 완료");
  • 상태코드 : 201, 본문 : "생성 완료"

📌 3. 헤더 포함

HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "이름");

return ResponseEntity
        .status(HttpStatus.OK)
        .headers(headers)
        .body("헤더 포함 응답");

 

📌 4. 에러 응답

return ResponseEntity
        .status(HttpStatus.BAD_REQUEST)
        .body("잘못된 요청입니다.");