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 methodParameterModelAndViewContainer modelAndViewContainerNativeWebRequest nativeWebRequestWebDataBinderFactory webDataBinderFactorythrows 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<HandlerMethodArgumentResolverresolvers) {

        resolvers.add(loginUserArgumentResolver);

        //스프링에서 인식하기 위해 resolver 등록.

    }

}

 

o    Controller에는 다음과 같이 메소드가 정의됩니다.

o    Public String getAllList(@LoginUser UserInfo user, Modelmodel, @PageableDefault Pageable pageable)

 

 

·         참고 https://velog.io/@swchoi0329/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0%EC%99%80-OAuth-2.0%EC%9C%BC%EB%A1%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84

 

댓글

가장 많이 본 글