HandlerMapping
컴포넌트 사용RequestMappingHandlerMapping
@RequestMapping
, @GetMapping
, @PostMapping
등이 붙은 메서드를 찾아서 반환HandlerAdapter
컴포넌트 사용4-1. 핸들러 어댑터를 통해 핸들러(컨트롤러)를 호출할 때, ArgumentResolver
를 호출
@PostMapping("/user")
public ResponseEntity<String> createUser(@RequestBody UserDto userDto) {
// ...
}
HandlerMethodArgumentResolver
컴포넌트 사용 (각 파라미터에 들어갈 값(Argument) 을 만들어주는 컴포넌트)@RequestBody UserDto userDto
처럼, 직접 파라미터를 전달하지 않아도 Spring이 알아서 값을 넣어주는 역할 --> ArgumentResolver
가 담당ArgumentResolver
: 요청 데이터 --> Java 파라미터로 변환@RequestBody
를 처리할 때 내부적으로 HttpMessageConverter
를 사용해 JSON → Java 객체로 변환4-2. 변환된 데이터로 컨트롤러 호출
UserDto userDto = ... // ArgumentResolver가 만들어줌
controller.createUser(userDto); // 호출!
4-3. Controller 의 반환값을 Response 로 변환
HandlerMethodReturnValueHandler
: Java 객체 --> Http 응답으로 변환@GetMapping("/user")
public @ResponseBody UserDto getUser() {
return new UserDto("홍길동", 30);
}
여기서 UserDto 객체를 --> JSON 응답으로 만들어주는 것 : ReturnValueHandler
요청 → DispatcherServlet → HandlerMapping → Controller 메서드 찾음
→ HandlerAdapter → [ArgumentResolver] → 파라미터 생성
→ Controller 메서드 실행
→ [ReturnValueHandler] → 반환값을 HTTP 응답으로 변환