2022.12.20 TIL

듀듀·2022년 12월 20일
0

[ Spring ] @Controller 와 @RestController 의 차이

Spring 에서 Controller로 지정해주기 위한 어노테이션은 @Controller@RestController가 있다.
@Controller는 전통적인 Spring MVC의 컨트롤러.
@RestControllerRestful 웹서비스의 컨트롤러.
이 둘의 주요한 차이점은 HTTP Response Body가 생성되는 방식이다.

[ Controller 로 View 반환 ]

위의 과정을 통해 Spring MVC ContainerClient의 요청으로부터 View를 반환한다.

[ Controller 로 Data 반환 ]

데이터를 반환하기 위해서는 @ResponseBody 어노테이션을 활용한다. 이를 통해 Json 형태로 데이터를 반환할 수 있다.

[ @RequestBody vs @ResponseBody ]

@RequestBody 는 HTTP요청의 바디내용을 통째로 자바객체로 변환해서 매핑된 메소드 파라미터로 전달해준다. xml이나 json기반의 메세지를 사용하는 요청의 경우에 이 방법이 유용하다.

@ResponseBody 는 자바객체를 HTTP요청의 바디내용으로 매핑하여 클라이언트로 전송한다.

[ @RestController ]

@Controller 와 다르게 @RestController 는 리턴값에 자동으로 @ResponseBody 가 붙게되어 별도 어노테이션을 명시해주지 않아도 HTTP 응답데이터(Body)에 자바 객체가 매핑되어 전달된다.
@Controller 인 경우에는 바디를 자바객체로 받기 위해서는 @ResponseBody 어노테이션을 반드시 명시해주어야 한다.

만약 @GetMapping 에서 리턴객체를 날것그대로 반환해준다면 클라이언트가 예상하는 HttpStatus를 설정해줄 수 없는 문제가 생긴다. 그래서 객체를 상황에 맞는 ResponseEntity로 감싸서 반환해 주어야 한다.

profile
나는 내 의지대로 된다.

0개의 댓글