연구실 서비스 프로젝트를 진행하다가 @ResponseBody
애노테이션을 사용하는 이유가 궁금해졌다. 애노테이션 선언부로 들어가 보면 다음과 같은 설명이 있다.
Annotation that indicates a method return value should be bound to the web response body. Supported for annotated handler methods.
‘해당 메서드의 return 값은 반드시 웹 response body에 바인딩 되어야 한다.’ HTTP 응답 메시지 바디에 return 값이 담긴다는 의미일 것이다.
그동안 이 프로젝트뿐만 아니라 다른 프로젝트에서도 @ResponseBody
애노테이션을 사용한 적이 없는 것 같다. 그럼에도 불구하고 HTTP 메시지 바디에 반환값이 잘 담겨 전달되었다. 그럼 굳이 이 애노테이션이 필요 없는 것 아닌가 싶었다.
@ResponseBody
설명 주석의 함께 보기에 @RequestBody
와 @RestController
가 있다. 왜냐. @RestController
선언부로 들어가 보면 @ResponseBody
가 붙어있는 것을 알 수 있다. 난 그동안 @RestController
를 사용해 개발했기 때문에 자연스럽게 HTTP 메시지 바디에 값이 담겼던 것이다.
@Controller
에는 해당 애노테이션이 없다.
@ResponseBody
는@Controller
로 지정한 경우, 필요한 상황에 사용할 수 있는 애노테이션인가 보다.@Controller
에서 데이터를 메시지 바디에 실어 응답하고 싶은 경우에는@ResponseBody
애노테이션을 사용해야 한다.
@ResponseBody
를 사용하지 않는 경우
@Controller
@RequestMapping("/api/v1/test")
public class TestController {
@RequestMapping
public ResponseTestDTO test() {
return new ResponseTestDTO("ㅋㅋ", 24);
}
}
404
Not Found. 리소스를 찾을 수 없다고 응답한다.
@ResponseBody
를 사용한 경우, JSON 데이터가 body에 담겨 온 것을 확인할 수 있다.
역시 이렇게 하나하나 알아가는 재미가 쏠쏠한 것 같다 😄