
RequestMappingHandlerAdapter는@RequestMapping은 를 처리하는 핸들러 어댑터이다.
@RequestMapping 기반의 컨트롤러는 다양한 파라미터를 사용할 수 있다.
예를 들면 `HttpServletRequest , Model, @RequestParam , @ModelAttribute, @RequestBody , HttpEntity 등이 있다.
이렇게 많은 파라미터를 처리하는 등 매우 유연한 모습을 보여줄 수 있는 이유는 ArgumentResolver를 호출해 컨트롤러(=핸들러)가 필요한 파마미터 값(객체)를 생성하기 때문이다.
ArgumentResolver란 정확히  HandlerMethodArgumentResolver이고, 줄여서 ArgumentResolver라고한다.
파라미터를 각 타입으로 변환시켜주는 리졸버이다.
스프링에는 약30개 이상의ArgumentResolver가 존재함
RequestMapping핸들러 어댑터가 ArgumentResolver의 supportsParameter()를 호출해서 컨트롤러(=핸들러)가 원하는 파라미터를 지원하는지 확인resolveArgument()를 호출해 파라미터를 변환RequestMapping핸들러 어댑터가 변환된 파라미터를 넘겨주며 컨트롤러(=핸들러) 호출ReturnValueHandler란 정확히HandlerMethodReturnValueHandler이다.
이것은 ArgumentResolver와 비슷한데, ArgumentResolver는 요청 값에 대한 변환을 처리했다면 ReturnValueHandler는 응답 값에 대한 처리를 한다.
응답 값을 String으로 리턴해도 뷰 이름으로 동작하게 해주고, @ResponseBody가 붙어있으면 그대로 반환하게 해주는 이유이다.
이것도 ArgumentResolver와 같이 spring에서 여러개의 ReturnValueHandler가 존재한다.
ArgumentResolver의 동작 방식과 비슷하다.

요청의 경우 ArgumentResolver를, 응답의 경우 ReturnValueHandler를 사용해서 각각의 값을 변환한다.
이렇게 변환을 할 때에 사용하는 것이 HTTP 메시지 컨버터이기때문에 HTTP 메시지 컨버터는 ArgumentResolver와 ReturnValueHandler안에서 호출되어 사용된다.