Spring Boot에서 컨트롤러를 지정하는 방법은 클래스에 어노테이션을 달아 주는 것이다. 항상 @RestController
만 별 생각 없이 사용해왔는데 책을 보다가 @Controller
가 보여서 둘의 차이점을 정리해보았다.
@Controller
@Controller
는 전통적인 MVC 패턴에서 View를 반환하는 데에 사용된다. 이 때 작업의 흐름은 아래와 같다.
View가 아닌 데이터만을 클라이언트에게 반환하기 위해서는, @ResponseBody
어노테이션을 메서드마다 붙여 데이터를 Json 형태로 변환해서 HttpResponse를 전달해야 한다. 이 때의 흐름은 아래와 같다.
@Controller
public class HelloController {
@GetMapping(value = "/hello")
public @ResponseBody String hello() {
return "hello";
}
}
@RestController
@RestController
는 HttpResponse에 특화된 컨트롤러의 한 종류다.@Controller
와 @ResponseBody
를 포함하고 있기 때문에, 데이터를 자동으로 Json 형태로 HttpResponse에 담아준다. 이를 통해 코드를 더 간결하게 작성할 수 있다. 이 어노테이션은 Spring Boot Starter Web
프로젝트에 들어있다.
@RestController
public class HelloController {
@GetMapping(value = "/hello")
public String hello() {
return "hello";
}
}
The Spring @Controller and @RestController Annotations
[Spring] @Controller와 @RestController 차이