Argument Resolver는 클라이언트의 HTTP 요청을 컨트롤러 메서드의 매개변수로 매핑해주는 역할을 합니다.

 

ex)

예를 들어, @RequestParam, @PathVariable, @RequestBody 등의 애노테이션을 사용하면 이들은 내부적으로 Spring MVC의 기본 Argument Resolver에 의해 처리됩니다

@RestController
public class MyController {
  
  @GetMapping("/greet")
  public String greet(@RequestParam String name) {
    return "Hello, " + name;
  }
  
}

 

HandelrMethodArgumentResolver

public interface HandlerMethodArgumentResolver {

    boolean supportsParameter(MethodParameter parameter);
    
    @Nullable
	Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;
     
     }

커스텀 Argument Resolver

HandlerMethodArgumentResolver 인터페이스를 구현하여 커스텀 Argument Resolver를 만들 수 있습니다.

public class CustomUserArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.getParameterType().equals(CustomUser.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        // 로직을 통해 CustomUser 객체를 생성하고 반환
        return new CustomUser("John", "Doe");
    }
}

이렇게 만든 후에는 이 Argument Resolver를 Spring MVC에 등록해야 합니다.

@Configuration
public class WebConfig implements WebMvcConfigurer {
  
  @Override
  public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
    resolvers.add(new CustomUserArgumentResolver());
  }
  
}

이제 컨트롤러 메서드에서 CustomUser 타입의 매개변수를 사용할 수 있고, 이 매개변수는 CustomUserArgumentResolver에 의해 처리됩니다

@RestController
public class MyController {
  
  @GetMapping("/custom")
  public String customEndpoint(CustomUser customUser) {
    return "Hello, " + customUser.getFirstName();
  }
  
}

이렇게 하면 CustomUser 객체는 CustomUserArgumentResolver를 통해 생성되고, 컨트롤러 메서드의 매개변수로 전달됩니다.

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

' > Spring' 카테고리의 다른 글

http 메시지 컨버트 위치?  (0) 2023.09.03
returnvalue handler란?  (0) 2023.09.03
HTTP 메시지 컨버터란?  (0) 2023.09.03
view Resolver란?  (0) 2023.09.03
HTTP 응답 방식  (0) 2023.09.02

+ Recent posts