[Spring] @Controller vs. @RestController

nathan·2022년 2월 28일
0

Spring

목록 보기
1/4

@Controller와 @RestController의 차이는 무엇일까?



공통점

  • Spring에서 컨트롤러를 지정해주기 위한 어노테이션

차이점

@Controller

@Target(value=TYEP) 
@Retention(value=RUNTIME) 
@Documented 
@Component 
public @interface Controller
  • Spring MVC 컨트롤러
  • HTTP Response Body 생성 방식 : Model 객체를 만들어 데이터를 담아 View에 반환

@RestController

@Target(value=TYEP) 
@Retention(value=RUNTIME) 
@Documented 
@Controller 
@ResponseBody 
public @interface RestController
  • RESTful 웹 서비스의 컨트롤러
  • HTTP Response Body 생성 방식 : 단순 객체만을 반환하고, 해당 객체 데이터는 JSON, XML 형식 등으로 HTTP Response Body에 담겨 전송
    • 즉, 모든 메서드가 View 대신 객체(JSON, XML 형식)로 작성이 된다.
  • @Controller + @ResponseBody의 동작을 조합한 형태 (같은 방식으로 작동함)
    @RestController
    public class RestfulController {
       ...
    }
    
    @Controller
    @ResponseBody
    public class SpringMvcController {
       ...
    }
  • 특정 메서드에만 @ResponseBody를 적용시킬수도 있다. (단, 클래스에는 @Controller 어노테이션)
@GetMapping("/api/hello")
@ResponseBody
public String apiHello() {
    return "Spring is comming...";
}   

일반적 Spring MVC Work-Flow


이미지 출처 : www.facebook.com/photo/?fbid=1873079892846068&set=gm.3389524044492534

  • @Controller는 주로 View를 반환하기 위해 사용
  • 위의 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View 반환
    • 이 때 View Resolver가 사용되며, View Resolver 설정에 맞게 View를 찾아 렌더링

Controller - Data

  • Spring MVC 컨트롤러에서도 Data를 반환해야하는 경우가 생긴다.
  • 이 때 @ResponseBody 어노테이션을 쓰게 된다.
    • 이를 통해 JSON 형태로 데이터를 반환할 수 있게 된다.


https://mangkyu.tistory.com/49

  • Client가 URI형식으로 Request 보냄
  • Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
  • @ResponseBody를 사용하여 Client에게 JSON 형태로 데이터를 반환

RestController


https://mangkyu.tistory.com/49

  • Client가 URI형식으로 Request 보냄
  • Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
  • @RestController를 사용하여 Client에게 JSON 형태로 데이터를 반환

Reference

profile
나는 날마다 모든 면에서 점점 더 나아지고 있다.

0개의 댓글