spring boot/spring boot

spring boot 에서 argumentResolver

ballde 2021. 12. 4. 21:53

  • api 엔드 포인트로부터 들어온 데이터를 가공하여 필요한 데이터만 뽑는 경우 많이 사용한다.
  • argumentResolver는 interceptor 요청 뒤에 이루어집니다.

예시로 argumentResolver로 memberId를 뽑아보도록 하겠습니다.

만약 argumentResolver가 없다면??

@GetMapping("/memberId")
private void memberId(HttpSession session){
    ...

    Long memberid = session.getAttribute("memberId");
    ...
}

이렇게 컨트롤러마다 memberId를 뽑아야합니다....

그래서 argumentResolver를 사용해보겠습니다.

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface MemberId {

}
public class StoreIdArgumentResolver implements HandlerMethodArgumentResolver {
        @Override
    public boolean supportsParameter(MethodParameter parameter) {
        boolean hasAnnotation = parameter.getParameterAnnotation(MemberId.class) != null;
        return hasAnnotation;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        return webRequest.getAttribute("memberId", 0);
                // 또는 세션안에 있다면
                // return session.getAttribute("memberId");
    }
}

return webRequest.getAttribute("memberId", 0); 에서 0은 아래를 나타냅니다.

 

 

'spring boot > spring boot' 카테고리의 다른 글

spring boot에서 커맨드 패턴  (0) 2023.04.20
spring boot에서 filter  (0) 2021.12.04
spring boot 에서 interceptor  (0) 2021.12.04
spring의 dispatcher-servlet와 전체적인 흐름  (0) 2021.10.20
spring 기본 개념 - IOC, DI  (0) 2021.10.18