Spring
에서 Controller
로 지정해주기 위한 어노테이션은 @Controller
와 @RestController
가 있다.
@Controller
는 전통적인 Spring MVC
의 컨트롤러.
@RestController
는 Restful
웹서비스의 컨트롤러.
이 둘의 주요한 차이점은 HTTP Response Body
가 생성되는 방식이다.
위의 과정을 통해 Spring MVC Container
는 Client
의 요청으로부터 View
를 반환한다.
데이터를 반환하기 위해서는 @ResponseBody
어노테이션을 활용한다. 이를 통해 Json
형태로 데이터를 반환할 수 있다.
@RequestBody
는 HTTP요청의 바디내용을 통째로 자바객체로 변환해서 매핑된 메소드 파라미터로 전달해준다. xml
이나 json
기반의 메세지를 사용하는 요청의 경우에 이 방법이 유용하다.
@ResponseBody
는 자바객체를 HTTP요청의 바디내용으로 매핑하여 클라이언트로 전송한다.
@Controller
와 다르게 @RestController
는 리턴값에 자동으로 @ResponseBody
가 붙게되어 별도 어노테이션을 명시해주지 않아도 HTTP 응답데이터(Body)에 자바 객체가 매핑되어 전달된다.
@Controller
인 경우에는 바디를 자바객체로 받기 위해서는 @ResponseBody
어노테이션을 반드시 명시해주어야 한다.
만약 @GetMapping
에서 리턴객체를 날것그대로 반환해준다면 클라이언트가 예상하는 HttpStatus
를 설정해줄 수 없는 문제가 생긴다. 그래서 객체를 상황에 맞는 ResponseEntity
로 감싸서 반환해 주어야 한다.