@ResponseBody는 컨트롤러 메서드의 반환값을 HTTP 응답 본문(Body)에 그대로 출력하도록 만들어주는 Spring MVC 애노테이션입니다.
HTML 뷰가 아닌 JSON, 문자열, 객체 등을 직접 반환하고 싶을 때 사용합니다.
주로 REST API 응답 처리에 사용되며,@RestController에도 포함되어 있습니다.
@GetMapping("/api/news")
@ResponseBody
public NewsDTO getNews() {
return new NewsDTO("뉴스 제목", "뉴스 내용");
}
{
"title": "뉴스 제목",
"content": "내용입니다"
}
DispatcherServlet이 요청을 가로챕니다.@ResponseBody가 붙은 메서드의 반환값은 뷰 이름으로 처리하지 않고 그대로 반환됩니다.@ResponseBody가 선언되면, 스프링은 반환 객체를 JSON이나 텍스트 등으로 변환할 필요가 있음을 인지합니다.HttpMessageConverter라는 전략 객체가 처리합니다.MappingJackson2HttpMessageConverter가 사용됩니다.// 예시
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(newsDTO);
Content-Type: application/json으로 설정됩니다.| 항목 | @ResponseBody | @RestController |
|---|---|---|
| 위치 | 메서드에 붙임 | 클래스에 붙임 |
| 역할 | 해당 메서드 반환값을 응답 본문으로 전송 | 해당 클래스의 모든 메서드에 @ResponseBody가 자동 적용 |
| 주로 사용 위치 | 개별 메서드 | 전체 REST API 컨트롤러 |
// 개별 메서드에 적용
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello"; // 이 문자열이 뷰 이름이 아닌, 응답 본문으로 그대로 전송됨
}
@ResponseBody가 붙으면 Spring은 "Hello"를 뷰 이름으로 해석하지 않고, HTTP 응답 바디로 문자열 "Hello"를 그대로 전송합니다.// 전체 컨트롤러에 적용
@RestController
@RequestMapping("/api")
public class NewsController {
@GetMapping("/hello")
public String hello() {
return "Hello"; // 클래스에 @RestController가 선언되어 있으므로 자동으로 @ResponseBody 적용됨
}
}
@RestController는 클래스 전체에 @ResponseBody를 포함하는 역할을 합니다.@GetMapping("/ping")
@ResponseBody
public String ping() {
return "pong"; // "pong"이라는 텍스트가 그대로 HTTP 응답 바디에 작성됨
}
/ping 요청을 보내면, 응답은 텍스트 “pong” 한 줄로 구성됩니다.pong
@GetMapping("/user")
@ResponseBody
public UserDTO getUser() {
return new UserDTO("홍길동", 30); // 이 객체가 JSON으로 자동 직렬화되어 응답됨
}
{
"name": "홍길동",
"age": 30
}
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/me")
public UserDTO getMe() {
return new UserDTO("이순신", 25); // JSON 자동 직렬화
}
}
@RestController가 선언되어 있으므로 @ResponseBody를 생략해도 메서드 반환값이 JSON으로 응답됩니다.MappingJackson2HttpMessageConverter를 자동 등록합니다.{
"name": "이순신",
"age": 25
}
@ResponseBody가 붙으면 문자열은 그대로 바디로 출력됨spring-boot-starter-web만 있으면 Jackson과 메시지 컨버터가 자동 설정됨