Request Mapping Handler Adapter
Spring

Request Mapping Handler Adapter

728x90
반응형
Spring MVC 에서 HTTP 메시지 컨버터의 동작 위치

애노테이션 기반의 컨트롤러, @RequestMapping을 처리하는 핸들러 어댑터 - RequestMappingHandlerAdapter에서 동작

 

# 전체 동작 개요 

  • 이 때 RequestMappingHandlerAdapter에서는 들어온 request에 대해서 어떠한 형식(파라미터, 애노테이션 정보)를 기반으로  ArgumentResolver가 전달 데이터를 생성 
    • Controller 정보 - HttpServletRequest, Model, @RequestParam, @ModelAttribute, @RequestBody, HttpEntity 등
  • 이후 ArgumentResolver가 전달해준 값을 RequestMappingHandlerAdapter가 컨트롤러에게 값을 전달한다. 
  • 그리고 컨트롤러에서 나온 값을 ReturnValueHandler에게 주고 응답 값을 변환하고 처리한다.
  • ReturnValueHandler가 처리한 값을 다시 RequestMappingHandlerAdapter에게 전달한다. 

 


# ArgumentResolver

  • 컨트롤러는 다양한 파라미터가 존재
    • HttpServletRequest, Model
    • @RequestParam, @ModelAttribute
    • @RequestBody, HttpEntity -(http 메시지를 처리하는 부분)
  • 따라서 매우 큰 유연함이 필요함 → 이러한 유연성 제공을 ArgumentResolver가 해준다.

 

- ArgumentResolver 를 사용했을 때의 Controller 구현 

  @GetMapping("/member")
  public ResponseEntity<MemberResponse> findMemberOfMine(@AuthenticationPrincipal LoginMember loginMember) {
      MemberResponse memberResponse = memberService.findMember(loginMember.getId());
      return ResponseEntity.ok().body(memberResponse);
  }

 

정리
ArgumentResolver는 RequestMappingHandlerAdapter가 호출하여 컨트롤러(핸들러)가 필요로 하는 파라미터를 생성해주고 이 파라미터의 값을 RequestMappingHandlerAdapter가 받아서 컨트롤러를 호출하여 파라미터를 전달한다.  

 

 

# ReturnValueHandler

  • 컨트롤러에서 나온 값을 변환하여 RequestMappingHandlerAdapter에게 전달한다. 
  • 변환 및 처리한 값 ModelAndView, @ResponseBody, HttpEntity, String ...

전체적인 흐름에서 볼 땐 returnvalueHandler의 역할은 다음과 같다 


# HttpMessageConverter

 

  • ArgumentResolver와 ReturnValueHandler가 HttpMessageConverter를 사용한다. 
    • @RequestBody, @ResponseBody, HttpEntity 등 일 때 httpMessageConverter를 사용  
  • httpMessageConvert를 사용하는 @RequestBody, @ResponseBody 모두 컨트롤러의 파라미터의 값, 반환 값을 이용한다. 
Spring MVC는
- @RequestBody , @ResponseBody 가 있을 때 
     -   RequestResponseBodyMethodProcessor - [ ArgumentResolver ] 사용
- HttpEntity가 있을 때 
     -   HttpEntityProcessor - [ ArgumentResolver ] 사용

 

이번 포스팅에서는 Spring MVC 에서 HTTP 메시지 컨버터의 동작 위치와 역할에 대해서 살펴보았다.

 

728x90
반응형