Spring/web Structure

@Controller 와 @RestController Diff

whyWhale 2021. 4. 1.

@Controller


controller - view

  • 전통적인 spring MVC 컨트롤러.
  • View를 반환하기 위해 사용
  • client는 URI 형식으로 웹서비스에 요청을 보낸다.
  • Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트(가로채기) 한다.
  • Controller가 client 요청을 처리 후에 응답은 DispatcherServlet으로 반환하고, DistpatcherServlet은 View를 사용자에 반환한다.
  • @Controller가 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver가 설정에 맞게 View를 찾아 랜더링 한다.

 

 

Contoller - View 

controller - Data

  • 단순히 view를 처리함과는 다르게 요청한 Data를 반환 하는 경우가 존재한다.
  • springMvc 컨트롤러에서 데이터를 반환하기 위해 @ResponseBody 를 활용해야 한다.
  • 이를 통해 Controller에서 JSON형태의 데이터로 반환이 가능하다.
  • client는 URI 형식으로 웹 서비스에 요청을 보낸다.
  • Mapping되는 Handler와 그 type을 찾는 DispatcherServlet이 요청을 인터셉트 한다.
  • @ResponseBody를 사용하여 Client에게 Json형태로 데이터를 반환한다.

 

 

 

 

※ 💡PLUS

  • @RestController가 Data를 반환하기 위해서는 viewResolver 대신에 httpMessageConverter가 동작한다.
  • HttpMessageConverter에는 여러 Converter가 등록되어 있고, 반환해야 하는 데이터에 따라 사용되는 Converter가 달라진다.
  • 단순 문자열인 경우 StringHttpMessageConverter가 사용된다.
  • 객체 인 경우 MappingJackson2HttpMessageConverter가 사용된다.
  • 데이터의 종류에 따라 서로 다른 MessageConverter가 작동하게 된다.
  • spring은 클라이언트의 HTTP Accept헤더와 서버의 컨트롤러 반환 타입 정보들을 조합해 적합한 HttpMessageConverter를 선택하여 이를 처리한다.

 

 

 

@RestController(spring Restful Controller)


  • client URI 형식으로 웹 서비스에 요청을 보낸다.
  • Mapping 되는 Handler와 그 type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
  • RestController는 해당 요청을 처리하고 데이터를 반환한다.

 

RestController

댓글