
- 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 |