@Controller와 @RestController의 차이점

KingDoor·2022년 9월 20일
0
post-thumbnail

문득 매번 @RestController 로 쓰면서도 @Controller 와 차이가 뭘까 알지를 못했다...

@Controller 와 @RestController

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다.

전통적인 Spring MVC 컨트롤러인 @Controller와 RESTful 웹 서비스의 컨트롤러인 @RestController의 주요한 차이점은

HTTP Response Body가 생성되는 방식입니다.

@Controller의 역할은 Model 객체를 만들어 데이터를 담고 View를 반환하는 것이고,

@RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답에 담아 전송합니다.

물론 @Controller도 @ResponseBody를 사용해서 만들 수 있지만 이런 방식은 RESTful 웹 서비스의 기본 동작이기 때문에

Spring은 @Controller와 @ResponseBody의 동작을 조합한 @RestController를 도입했습니다.

아래의 코드는 Spring MVC에서 동일한 동작을 합니다.

@Controller
@ResponseBody
public class MVCController {
	business logic...
}
@RestController
public class RestFulController {
	business logic...
}

@RestController는 @Controller와 @ResponseBody의 동작을 하나로 결합한 컨트롤러라 보시면 됩니다.

Spring에서 @Controller와 @RestController의 차이점

  1. @Controller는 클래스를 Spring MVC 컨트롤러로 표시하는데 사용되고,@RestController는 RESTful 웹 서비스에서 사용되는 특수 컨트롤러이며 @Controller + @Response와 동일하다.
  1. @Controller와 @RestController의 주요 차이점 중 하나는 @RestController를 표시하면 모든 메소드가 뷰 대신 객체로 작성된다.
  1. @Controller는 @Component 주석이 달려있고, @RestController는 아래와 같이 @Controller와 @ResponseBody 주석이 달린 편의 컨트롤러이다.
@Target(value=TYEP)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller

@Target(value=TYEP)
@Retention(value=RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController

추가 : 쉽게 설명하자면 @Controller 는 View를 반환하고 @RestController는 View가 아닌 여러가지 형태를 반환할 수 있다.(ex. Json , String 등등)

출처: https://dev-coco.tistory.com/84#Spring%EC%--%--%EC%--%-C%--%--Controller%EC%--%--%--%--RestController%EC%-D%--%--%EC%B-%A-%EC%-D%B-%EC%A-%--

profile
백엔드 지망하는 취준생 입니다!

0개의 댓글