Argument Resolver
Controller์ Parameter๋ก ์ ๋ฌ๋๋ Argument๋ค์ ์ด๋ป๊ฒ ์์ฑ๋๋๊ฐ?
๋ถ๋ช Dispatcher Servlet์ด ๋ฐ๋ ๊ฒ์ Http Request์ผ ๋ฟ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ก๋ถํฐ Controller์์ ์๊ตฌํ๋ ํ๋ผ๋ฏธํฐ ๊ฐ๋ค(java์ primitive type value ๋๋ object๋ค)์ ์ด๋ป๊ฒ ์์ฑ๋๋ ๊ฑธ๊น?
์ด๋ฅผ ์ํํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก Argument Resolver
ํน์ ํ์ ์ ํ๋ผ๋ฏธํฐ, ํน์ ์ด๋ ธํ ์ด์ ์ด ์ฌ์ฉ๋ ํ๋ผ๋ฏธํฐ ๋ฑ์ ์๋ง์ Argument Resolver๊ฐ ๋์ํ์ฌ Argument๋ฅผ ์ธํ ํด ์ค
Argument Resolver
Dispatcher Servlet์ ์์ฒญ์ ์์ ํ๋ฉด ์ด๋ฅผ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ๊ธฐ ์ํ ๋์์ ๋จผ์ ์ํ
์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์์ ๋, ์ปจํธ๋กค๋ฌ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ค์ ์ธํ ํ๊ธฐ ์ํด ํธ์ถ๋๋ ๊ฒ์ด ๋ฐ๋ก
Argument Resolver
๋ํ์ ์ธ ์์๋ก
@RequestParam
,@RequestBody
,@ModelAttribute
์ ๊ฐ์ ๊ฒ๋ค์ด ์์๊ฐ๊ฐ ์ฌ์ฉํ๋ Resolver๊ฐ ๋ค๋ฅด๊ณ , Resolver ๋ด์์ ์ฌ์ฉํ๋ Message Converter๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ Argument์ ์์ฑ ๋ก์ง๋ ๋ค๋ฆ
Custom Argument Resolver
์์์ ์ธ๊ธํ ๋ํ์ 3๊ฐ์ง argument ์ธํ ๋ฐฉ๋ฒ
@RequestParam
,@RequestBody
,@ModelAttribute
๋ ๊ฐ๊ฐ HttpServletRequest๋ก๋ถํฐ ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ๊ธฐ ์ํด ์ฌ์ฉ๋จ@RequestParam
Query String์ผ๋ก ์ ๋ฌ๋ ๋จ์ผ ํ๋ผ๋ฏธํฐ
@RequestBody
Request Body์ ํฌํจ๋ ๋ฐ์ดํฐ
@ModelAttribute
Form-Data๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ
์ด์ธ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ๊ธฐ ์ํด์๋ Custom Argument Resolver๋ฅผ ์ ์ธํด ์ค ํ์๊ฐ ์์
๊ตฌํ ๋ฐฉ๋ฒ
public class CustomArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(ExpectedType.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
return new ExpectedType();
}
}
HandlerMethodArgumentResolver
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํ 2๊ฐ์ง ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ
supportsParameter
ํ๋ผ๋ฏธํฐ๊ฐ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ์ฌ๋ถ(boolean)์ ๋ฐ๋ผ ํด๋น resolver๋ฅผ ์ ์ฉํ ์ง๋ฅผ ๊ฒฐ์
true๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ
resolveArgument
๋ฉ์๋๊ฐ ์คํ๋จ
resolveArgument
ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ Argument๋ฅผ ์์ฑํ๋ ๋ฉ์๋
๋ฐํ๊ฐ์ด ์ปจํธ๋กค๋ฌ์ Argument๋ก ์ธํ ๋จ
Last updated