< Dev-Kidult />

Spring에서 @Controller와 @RestController의 차이 본문

개발/Back-end

Spring에서 @Controller와 @RestController의 차이

개른이 2018. 9. 19. 16:56


1. 소개


이 글에서는 Spring MVC에서 자주쓰게 되는 @Controller@RestController의 차이점을 알아보겠습니다.


먼저 @Controller 어노테이션은 스프링프로젝트의 컨트롤러에서 오랜기간 스프링프레임워크에서 사용되어져왔습니다


반면 @RestController는 4버전에서 도입이 되었습니다. @RestController 어노테이션은 Restful 웹서비스의 생산을 단순화 하기 위해서 만들어졌습니다.


@RestController에는 @Controller와 @RestController를 결합한 어노테이션이라고 보시면 됩니다.



2. Spring MVC @Controller 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller
@RequestMapping("/user")
class SimpleUserController {
 
    @GetMapping(value = "/{id}", produces = "application/json")
    public @ResponseBody User getUser(@PathVariable int id){
        return getUserById(id);
    }
 
    public User getUserById(int id){
        // ...
    }
}
cs


요청 처리 메소드는 @ResponseBody로 주석 처리 됩니다. 이 주석은 반환 객체를 HttpResponse로 자동 serialize합니다 .


3. Spring MVC @RestController 예제


@RestController는 @Controller 및 @ResponseBody 어노테이션이 포함되어 있으므로 컨트롤러 구현이 간단해집니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
@RequestMapping("/user")
class SimpleUserController {
 
    @GetMapping(value = "/{id}", produces = "application/json")
    public User getUser(@PathVariable int id){
        return getUserById(id);
    }
 
    public User getUserById(int id){
        // ...
    }
}
 
cs


이 컨트롤러는 @RestController어노테이션이 붙어서 @ResponseBody가 필요하지 않습니다.


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

반응형
Comments