[내배캠 Spring TIL] Spring HandlerMethodArgumentResolver 썸네일

[내배캠 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);
    }
}

WebMvcConfigurerArgumentResolver를 추가한다.

@RestController
public class CustomController {

    @GetMapping("/custom")
    public String handleCustom(CustomObject customObject) {
        return "Received: " + customObject.getValue();
    }
}

컨트롤러에서 CustomObject를 사용할 수 있게 된다.


최근 게시물

김진근 • © 2025