[Spring] @Controller vs @RestController
FRAMEWORK/Spring

[Spring] @Controller vs @RestController

반응형

들어가기 전에

@Controller는 전통적인 Spring controller로써 오래 사용되어졌습니다. Spring 4.0에서는 @RestController라는 좀 더 RESTful한 웹서비스를 간단히 만들 수 있는 어노테이션이 소개되었습니다. 이번 포스팅을 통해 간단히 두 가지 어노테이션의 차이를 살펴보겠습니다.

Spring MVC @Controller

@Controller

@Controller 어노테이션은 @Component 어노테이션을 가지고 있어 classpath 스캔을 통해 자동으로 구현체를 감지할 수 있습니다. 일반적으로 @Controller@RequestMapping 어노테이션과 함께 많이 쓰입니다.

@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) {
        // ...
    }
}
  • 위 소스코드를 보면, request의 응답에 @ResponseBody 어노테이션을 함께 붙여놓은 것을 볼 수 있습니다. @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가 포함되어 있기 때문에 각 요청의 응답에 @ResponseBody를 붙여주지 않아도 자동으로 응답 객체를 HttpResponse로 직렬화가 됩니다.

참고 자료

반응형