Language/Java
@Controller VS @RestController
개발하는 구름이
2023. 7. 17. 03:26
Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있다.
- Controller : 전통적인 Spring MVC의 컨트롤러
- RestContoller : Restful 웹서비스의 컨트롤러
# Controller
- 전통적인 Spring MVC의 컨트롤러
- 주로 view를 반환하기 위해 사용
- Client -> Dispatcher Servlet -> Handler Mapper -> Controller -> View Resolver -> View -> Client
-
- Client : URI 형식으로 웹 서비스 요청
- DispatcherServlet이 요청을 intercept -> Handler Mapping을 통해 요청에 맞는 Controller 호출
- 요청을 처리한 Controller가 응답을 DispatcherServlet에 반환 -> DispatcherServlet은 응답에 해당하는 View를 Client에게 반환
( @Controller에서 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver에서 설정에 맞는 View를 찾아 렌더링 )
- @Controller가 Data를 반환하는 경우 @ResponseBody 어노테이션을 활용 -> Json 형태로 데이터를 반환
- 이러한 형태로 사용하게 된다면, 모든 메서드에 @ResponseBody Annotation을 넣어줘야 하는 번거로움 존재
이러한 형태로 사용하게 된다면, 모든 메서드에 @ResponseBody Annotation을 넣어줘야 하는 번거로움 존재
# RestController
- @RestController = @Controller + @ResponseBody
- 주용도는 Json 형태로 객체 데이터를 반환하는 것 위의 @Controller가 Data를 반환하는 경우와 같은 케이스를 커버한다고 생각하면 된다.
- 정리하면, Controller에서 view를 반환하는 케이스 이외에 json data를 반환해야 되는 케이스에 @Controller + @ResponseBody를 함께 쓰는 번거로움을 해결하기 위해서 @RestController 탄생
**Json : 자바스크립트 객체