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
'웹 > 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 |