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๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

  1. supportsParameter

    • ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€(boolean)์— ๋”ฐ๋ผ ํ•ด๋‹น resolver๋ฅผ ์ ์šฉํ• ์ง€๋ฅผ ๊ฒฐ์ •

    • true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ resolveArgument ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋จ

  2. resolveArgument

    • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋  Argument๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ

    • ๋ฐ˜ํ™˜๊ฐ’์ด ์ปจํŠธ๋กค๋Ÿฌ์˜ Argument๋กœ ์„ธํŒ…๋จ

Last updated