spring) MethodParameterArgumentResolver
·
Java Spring의
controller에는 많은 메소드들이 존재 합니다.
·
메소드를 이용할 때 메소드의 인자를 이용하여 데이터를
주고 받습니다.
·
Spring에서 제공하는 MethodParameterArgumentResolver인터페이스는
메소드의 인자, 매개변수에 대한 설정할 수 있도록 합니다.
@Override
Public boolean supportsParameter(MethodParameter methodParameter)
§ 사용자정의의 작업을 적용시킬 인자를 판단할 수 있습니다.
@Override
Public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory)
§ 작업을 정의 및 메소드에 실제로 바인딩 할 객체를 리턴합니다.
o Ex)
@RequiredArgsConstructor
@Component
public class LoginUserArgumentResolver implements HandlerMethodArgumentResolver {
private final HttpSession httpSession;
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
boolean isLoginUserAnnotation =
methodParameter.getParameterAnnotation(LoginUser.class) != null;
boolean isUserClass = UserInfo.class.equals(methodParameter.getParameterType());
return isLoginUserAnnotation && isUserClass;
}
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
return httpSession.getAttribute("user");
}
}
o 해당 예시는 Contoller내부의
메소드 매개변수에 커스텀어노테이션을 명시하고 명시된 인자에 작업 및 객체 리턴 해주었습니다.
o 클래스를 정의한 후, spring에서
인지할 수 있도록 web설정에 명시해야합니다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginUserArgumentResolver loginUserArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(loginUserArgumentResolver);
//스프링에서 인식하기 위해 resolver를 등록.
}
}
o Controller에는 다음과 같이 메소드가 정의됩니다.
o Public String getAllList(@LoginUser UserInfo user, Modelmodel, @PageableDefault Pageable pageable)
댓글
댓글 쓰기