ArgumentResolver ํ์ฉ
by rlaehddnd0422https://rlaehddnd0422.tistory.com/61#article-3-1-1----argumentresolver
ArgumentResolver๋ฅผ ํ์ฉํด ์ธ์ ์ ๊ฐ์ง ํ์๋ง login ํ ํ๋ฉด์ผ๋ก ์ด๋,
์ธ์ ์ด ์๋ ํ์์ ํ ํ๋ฉด์ผ๋ก ์ด๋ํ๋๋ก ์ค์ ํด๋ณด๊ฒ ์ต๋๋ค.
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Login {
}
@Login ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ด๋ ธํ ์ด์ ์์ฑ
@GetMapping("/")
public String homeLoginV3ArgumentResolver(@Login Member loginMember, Model model)
{
// ์ธ์
์ ํ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด home์ผ๋ก ์ด๋
if(loginMember==null)
{
return "home";
}
// ์ธ์
์ด ์ ์ง๋๋ฉด ๋ก๊ทธ์ธ์ผ๋ก ์ด๋
model.addAttribute("member",loginMember);
return "loginHome";
}
์ปจํธ๋กค๋ฌ์ @Login Member loginMember ํ๋ผ๋ฏธํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ArgumentResolver๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
@Slf4j
public class LoginMemberArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
log.info("supportsParameter ์คํ");
boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class);
boolean hasMemberType = Member.class.isAssignableFrom(parameter.getParameterType());
// @Login ์ด๋
ธํ
์ด์
์ด๊ณ && ํ์
์ด Member์ฌ์ผ resolveArguemnt๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅ
return hasLoginAnnotation && 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();
if(session==null || session.getAttribute(SessionConst.LOGIN_MEMBER)==null)
{
return null;
}
Object member = session.getAttribute(SessionConst.LOGIN_MEMBER);
return member;
}
}
- ArgumentResolver๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์ HandlerMethodArgumentResolver ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค!
- boolean supportsParameter(MethodParameter parameter) : parameter์ ์ด๋ ธํ ์ด์ @Login์ด ๋ถ์ด์๊ณ , Member ํ์ ์ธ ๊ฒฝ์ฐ ์ด ArgumentResolver๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ค์ ํ ์กฐ๊ฑด์ด true์ธ ๊ฒฝ์ฐ์๋ง resolverArgument ๋ฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅ.
- resolveArgument(...) : ์ด๋ค ์กฐ๊ฑด์ Object๋ฅผ ๋ฆฌํดํ ์ง ์์ฑ. ์ด ์ฝ๋์์๋ ๋ก๊ทธ์ธํ ํ์์ ๋ํ ์ธ์ ์ด ์์ผ๋ฉด ํด๋น ํ์์ ๋ฆฌํดํฉ๋๋ค.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new LoginMemberArgumentResolver());
}
}
๋ง์ง๋ง์ผ๋ก ๋ง๋ค์๋ ArgumentResolver๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ WebMvcConfigurer๋ฅผ ์์๋ฐ์ ArgumentResolver๋ฅผ addArgumentResolvers() ๋ฉ์๋๋ฅผ ํตํด ๋ฐ๋์ ๋ฑ๋กํด ์ฃผ์ด์ผํฉ๋๋ค.
'๐ Backend > MVC Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
API์์์ ์์ธ ์ฒ๋ฆฌ (0) | 2023.03.28 |
---|---|
Spring - ์๋ธ๋ฆฟ ์์ธ ์ฒ๋ฆฌ ( Exception ) (0) | 2023.03.28 |
์คํ๋ง ์ธํฐ์ ํฐ(Interceptor) (0) | 2023.03.24 |
Servlet Filter(์๋ธ๋ฆฟ ํํฐ) (0) | 2023.03.24 |
๋ก๊ทธ์ธ ์ฒ๋ฆฌ - ์ฟ ํค, ์ธ์ (0) | 2023.03.23 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422