728x90
반응형
1. Argument Resolver 소개
Argument Resolver는 Spring MVC에서 컨트롤러 메서드의 파라미터를 유연하게 처리할 수 있게 해주는 강력한 기능입니다. 이를 통해 개발자는 요청 데이터를 원하는 형태로 가공하여 컨트롤러에 전달할 수 있습니다.
2. Argument Resolver의 역할
- HTTP 요청 데이터 변환: 요청의 파라미터, 헤더, 바디 등을 원하는 객체로 변환합니다.
- 공통 로직 처리: 인증 정보 추출, 데이터 검증 등의 공통 로직을 처리할 수 있습니다.
- 코드 중복 제거: 컨트롤러에서 반복되는 로직을 Argument Resolver로 이동시켜 코드 중복을 줄일 수 있습니다.
3. Argument Resolver 동작 원리
- 사용자가 HTTP Request를 보냅니다.
- DispatcherServlet이 요청을 받습니다.HandlerAdapter의 Argument Resolver 호출
- HandlerMapping을 통해 요청을 처리할 핸들러(컨트롤러)를 찾습니다.
- HandlerAdapter가 Argument Resolver를 호출합니다.
- Argument Resolver가 요청 데이터를 처리하여 핸들러 메서드의 파라미터로 전달할 객체를 생성합니다.
- 핸들러(컨트롤러) 메서드가 실행됩니다.
4. Argument Resolver 구현 방법
Argument Resolver를 구현하려면 HandlerMethodArgumentResolver 인터페이스를 구현해야 합니다.
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) throws Exception {
// 요청 데이터를 처리하여 CustomObject 생성 및 반환
CustomObject customObject = new CustomObject();
// customObject 설정...
return customObject;
}
}
5. Argument Resolver 사용 예시
- 커스텀 어노테이션 정의
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface CurrentUser {}
- Argument Resolver 구현
public class CurrentUserArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(CurrentUser.class) != null
&& parameter.getParameterType().equals(User.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
return getUserFromSession(request);
}
}
- 컨트롤러에서 사용
@GetMapping("/profile")
public String getProfile(@CurrentUser User user) {
return "User: " + user.getName();
}
6. 마무리
Argument Resolver는 Spring MVC에서 요청 데이터 처리를 유연하게 만들어주는 강력한 도구입니다. 이를 통해 코드의 재사용성을 높이고, 컨트롤러의 책임을 줄여 더 깔끔한 코드를 작성할 수 있습니다. 복잡한 비즈니스 로직이나 공통 처리 로직을 Argument Resolver로 분리함으로써, 개발자는 핵심 비즈니스 로직에 더 집중할 수 있게 됩니다.
728x90
반응형
'프레임워크 > Spring' 카테고리의 다른 글
Spring Boot 3에서 Swagger와 H2 Database 사용하기 (1) | 2025.02.20 |
---|---|
스프링 Filter, Interceptor, AOP 정리 (2) | 2024.09.15 |