본문 바로가기
학습/Spring

[spring] 스프링 웹 MVC의 ViewResolver

by KKambi 2020. 4. 21.

스프링 웹 MVC의 컨트롤러

Controller

  1. view name을 반환하거나
  2. 반환값을 HTTP Response Body에 쓴다.



  • 1번은 @ResponseBody를 handler method에 사용하지 않을 때
    1. view name 반환
    2. 스프링 웹 MVC에서는 DispatcherServlet가 ContentNegotiationViewResolver에게 view name 전달
    3. ContentNegotiationViewResolver는 등록된 view resolver들에게 보내, 요청의 응답을 만들 수 있는 모든 view를 찾아낸다
    4. URL의 파라미터와 Accept 헤더를 보고 적절한 view를 결정한다.
    5. 처리결과를 담은 view를 반환한다.
  • ContentNegotiationViewResolver는 다른 view resolver와 다르게, 직접 view 객체를 찾지 않는다.
  • 다른 view resolver에게 적합한 view를 찾으라고 위임한다.
  • 이 때는 메세지 컨버터가 사용되지 않는다.



  • 2번은 @ResponseBody를 handler method에 사용할 때
    1. 반환 ( 객체 / String / int / ... )
    2. 적절한 HttpMessageConvert를 탐색
    3. 변환하여 HTTP 응답 본문에 쓴다.

헤더

  • Content-type 헤더는 클라이언트가 어떤 타입의 요청을 보내는지?
  • Accept 헤더는 클라이언트가 어떤 타입의 응답을 원하는지?
  • 결국 Accept 헤더는 클라이언트가 어떤 타입의 view를 원하는지와 연관

Format 파라미터 (URL확장자)

  • Accept 헤더를 사용하지 않을 때
  • /path?format=pdf / xml / json / html / ...

댓글