ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] ArgumentResolver
    Spring 2025. 4. 17. 15:29

     

    minecraft-font

    Spring

     

     

     

    🔥 Spring MVC에서  HTTP 요청을 컨트롤러 메서드에 매핑하고 실행하는 핵심 구성 요소!

           🎯  클라이언트 요청을 적절한 컨트롤러 메서드와 연결한 후 이 메서드를 호출하여 결과를 반환하는 역할을 수행한다.

     


    ✅ RequestMappingHandlerAdapter

     

    @RequestMapping
    @PostMapping @GetMapping @PutMapping @PatchMapping DeleteMapping

     

    •  Spring MVC에서 클라이언트 요청을 실제 컨트롤러 메서드에 연결하고 실행해주는 핵심 클래스.

    • Client 요청 → DispartcherServlet(프론트 서블릿) → RequestMappingHandlerMapping(어떤 메서드 실행할지 탐색 URI 맴핑) → RequestMappingHandlerAdapter(실제 메서드 실행 + 응답 생성) → Respon 반환 

     

     

     

     

    🔥 ArgumentResolver (매개 변수, 파라미터  Resolver)

          🎯  Spring MVC에서 컨트롤러 메서드의 파라미터를 자동으로 바인딩하는 역할을 하는 인터페이스

          🎯 요청이 컨트롤러 메서드에 전달될 때 각 파라미터를 적절한 객체로 변환하여 주입하는 것을 담당한다.

     

     ArgumentResolver 

    • ArgumentResolver의 풀 네임  HandleMethodArgumentResolver

               ■ 인터페이스로 구성 되어 있다.

                 implements 하여 커스텀하게 파라미터를 만들 수 있다.(확장)

     

    •     supportsParameter(MethodParameter parameter);

                  컨트롤러가 필요하는 메서드의 파라미터를 지원하는지 여부를 검사한다.

     

    •    지원한다면 resolveArgument()메서드를 통해 Object(객체)로 만들어 준다.

                 만들어진 Object(객체)가 Controller 호출시 메서드의 파라미터로 전달된다.

    @GetMapping("/api/users/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        // 여기서 id는 어디서 온 걸까?
    }

     

    이때, URL의 id를 꺼내오는 것이 HandlerMethodArgumentResolver가 자동으로 처리한다.

      담당 Target
    ArgumentResolver PathVarialbeMethodArguementResolver @pathVariable
    RequestParamMethodArgumentResolver @RequestParam
    RequestBodyMethodArgumentResolver @RequestBody
    HttpServeltRequestMethodArgumentResolver @HttpServeltRequest
    ModelAtributeMethodArgumentResolver @ModelAtribute
    RequestHeaderMethodArgumentResolver @RequestHeader

     

     

    • RequestMappingHandlerAdapter는 ArgumentResolver를 호출하여 Controller가 필요한 다양한 파라미터의 값을
      생성한다.

    • HttpServletRequest, Model, HttpEntity,@ModelAttribute, @RequestBody, @RequestParam 등 다양한 파라미터를 바인딩을 할수 있는 이유는 ArgumentResolver를 통하여 값이 준비되면 해당값을 가지고 실제 Controller를 호출한다.

     

     

    🔥 ReturnValueHandler

          🎯 Spring MVC에서 컨트롤러 메서드가 반환하는 값을 처리하여 HTTP 응답에 맞게 변환하는 역 할을 하는 인터페이스

          🎯 컨트롤러 메서드가 실행된 후 그 반환값을 HTTP 응답의 본문에 적절히 담아 전송할 수 있도록 도와준다.


    ReturnValueHandler의 흐름

    1. 사용자가 요청을 보냄  → DispatcherServlet  → HandlerMapping으로 컨트롤러 찾음 → HandlerAdapter로 컨트롤러 실행
        → 컨트롤러의 반환값이 나옴 → ReturnValueHandler가 등장해서 이걸 HTTP 응답으로 바꿈

     

     

      종류 처리 타입
    ReturnValueHandler ViewNameMethodReturnValueHandler String
    ModelAndViewMethodReturnValueHandler ModelAndView
    RequestResponseBodyMethodProcessor @ResponseBody → 객체
      HttpEntityMethodProcessor HttpEntity, ResponseEntity

    'Spring' 카테고리의 다른 글

    [Spring]WebMvcConfigurer  (0) 2025.04.17
    [Spring] HttpMessageConverter(2)  (0) 2025.04.17
    [Spring] HttpMessageConverter  (0) 2025.04.17
    [Spring] 트랜잭션  (0) 2025.04.17
    [Spring] 고아 객체  (0) 2025.04.17
Designed by Tistory.