[Spring] ArgumentResolvers
아래의 예는 간단한 로그인 후 홈화면으로 넘어갈때 회원정보 객체 Model을 Session에 담아 로그인 후처리 하는 부분을 ArgumentResolver @Login을 등록하여 객체를 반환하는 예제이다.
AS-IS
public String home(@SessionAttribute(name=SessionConst.LOGIN_MEMEBER, required = false) Member member)
TO-BE
public String homeArgumentResolver(@Login Member member)
1. Annotaion 등록
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Login {
}
2. HandlerMethodArgumentResolver 등록
- supportsParameter : 해당 호출이 지원하는 상태인지 확인
- 지원한다면 Custom Logic 및 해당 객체 리턴
public class LoginMemberArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
log.info("supportsParamter 실행");
// Custom annotation이 있는지 확인 (내가 등록한 Customer anntation : Login.class)
boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class);
// Customer annotaion에 해당하는 파라미터가 Member 클래스와 같나?
boolean hasMemberType = Member.class.isAssignableFrom(parameter.getParameterType());
// 두개가 모두 만족하면 resolveArgument 실행
return hasMemberType && hasMemberType;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
log.info("resolverArgument 실행");
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
HttpSession session = request.getSession(false);
if(session==null) {
return null;
}
return session.getAttribute(SessionConst.LOGIN_MEMEBER);
}
}
3. Config 등록
resolvers.add(내가 등록한 ArgumentResolver 클래스);
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new LoginMemberArgumentResolver());
}
Author And Source
이 문제에 관하여([Spring] ArgumentResolvers), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ujone/Spring-ArgumentResolvers저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)