[내배캠 Spring TIL] Spring HandlerMethodArgumentResolver
Spring
2024년 9월 5일
HandlerMethodArgumentResolver
대해 공부한 내용을 정리해보려 한다.
HandlerMethodArgumentResolver #
HandlerMethodArgumentResolver는 컨트롤러 메서드의 파라미터가 특정 조건을 충족할 때, 해당 파라미터에 원하는 값을 자동으로 매핑해주는 인터페이스이다.
supportsParameter() #
이 메서드는 주어진 파라미터를 이 resolver
가 처리할 수 있는지 여부를 결정한다. 반환값이 true일 경우, 해당 파라미터는 이 resolver에 의해 처리된다.
resolveArgument() #
실제로 파라미터를 처리하는 메서드. 요청으로부터 데이터를 추출하여 컨트롤러 메서드의 파라미터에 전달될 값을 반환한다.
에제 코드 #
public class CustomArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(CustomObject.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
String param = webRequest.getParameter("customParam");
return new CustomObject(param);
}
}
파라미터에 CustomObject
가 있으면 supportsParameter
의 반환 값이 true
가 되어서 resolveArgument
가 동작하게 된다.
@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
private final CustomArgumentResolver customArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(customArgumentResolver);
}
}
WebMvcConfigurer
에 ArgumentResolver
를 추가한다.
@RestController
public class CustomController {
@GetMapping("/custom")
public String handleCustom(CustomObject customObject) {
return "Received: " + customObject.getValue();
}
}
컨트롤러에서 CustomObject
를 사용할 수 있게 된다.