목차

@Controller And @RestController Annotations

  • description : @Controller And @RestController Annotations
  • author : 오션
  • email : shlim@repia.com
  • lastupdate : 2022-12-13 Tue


@Controller And @RestController Annotations

오랫동안 스프링 프레임워크(Spring 2.5버전에서 도입)의 일부분을 담당해온 @Controller를 전통적인 Spring 컨트롤러로 사용할 수 있습니다.
Spring 4.0은 RESTful 웹 서비스 생성을 단순화하기 위해 @RestController 어노테이션을 도입했습니다.
@RestController 어노테이션은 @Controller와 @ResponseBody를 결합하는 편리한 어노테이션으로,
컨트롤러 클래스의 메소드를 처리하는 모든 요청을 @ResponseBody 어노테이션으로 처리할 필요가 없습니다.

Spring MVC @Controller

@Controller 어노테이션으로 전통적인 컨트롤러를 표시할 수 있습니다.
이 어노테이션은 단순히 @Component 클래스를 특화한 것으로, 클래스 패스 스캐닝을 통해 구현 클래스를 자동 감지할 수 있게 해줍니다.

메소드를 처리하는 요청을 위한 @RequestMapping 어노테이션과의 조합으로 @Controller를 일반적으로 사용합니다.

Spring MVC controller 예제

@Controller
@RequestMapping("books")
public class SimpleBookController {
 
    @GetMapping("/{id}", produces = "application/json")
    public @ResponseBody Book getBook(@PathVariable int id) {
        return findBookById(id);
    }
 
    private Book findBookById(int id) {
        // ...
    }
}


@ResponseBody 어노테이션으로 메소드 처리 요청을 하고, HttpResponse로 반환 객체를 자동 직렬화할 수 있습니다.

Spring MVC @RestController

@RestController는 컨트롤러를 특화한 버전입니다.
@RestController는 @Controller와 @ResponseBody 어노테이션을 포함하고 있으며, 컨트롤러 구현을 단순화하는 결과를 가져옵니다.

@RestController
@RequestMapping("books-rest")
public class SimpleBookRestController {
 
    @GetMapping("/{id}", produces = "application/json")
    public Book getBook(@PathVariable int id) {
        return findBookById(id);
    }
 
    private Book findBookById(int id) {
        // ...
    }
}


상기 예제에서, 컨트롤러는 @RestController 어노테이션으로 처리되어 있기 때문에, @ResponseBody는 필요하지 않습니다.

컨트롤러 클래스의 메소드를 처리하는 모든 요청은 자동으로 반환 객체를 HttpResponse로 직렬화합니다.

The Spring @Controller and @RestController Annotations
Java EE6 Tutorial - What Are RESTful Web Services?
RESTful API 이란
REST (Representational State Transfer)
Difference Between @Controller and @RestController Annotation in Spring