ArgumentResolver

애노테이션 기반의 컨트롤러는 매우 다양한 파라미터를 사용할 수 있었다.
@RequestParam, @ModelAttribute 는 HTTP 요청 파라미터 데이터를 사용하고,
@RequestBody 는 HTTP 메시지 바디의 데이터를 사용하는 등 애노테이션으로 사용할 데이터를 구분하였다.
이렇게 애노테이션에 따라 파라미터를 유연하게 처리할 수 있었던게 바로 ArgumentResolver 덕분이다.

 

동작 방식

아래는 HandlerMethodArgumentResolver 구현체이다.

public class AuthResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return false;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        return null;
    }
}

1. supportsParameter()

ArgumentResolver 의 supportsParameter() 를 호출해서 해당 파라미터를 지원하는지 체크한다.

2. resolveArgument()

supportsParameter() 의 값이 true 이면 resolveArgument() 를 호출해서 실제 객체를 생성한다.

이렇게 생성된 객체가 컨트롤러 호출시 아래의 그림처럼 넘어간다.

 

 

 

 

관련글

ArgumentResolver 실습

'백엔드 > Spring' 카테고리의 다른 글

yml 파일 분리해보기  (0) 2024.04.26
@ConfigurationProperties로 환경 변수 관리  (0) 2023.10.08
Interceptor 써보기  (0) 2023.09.29
Filter  (0) 2023.09.29
Interceptor  (0) 2023.09.29

+ Recent posts