

@RequestMapping์ ์ฒ๋ฆฌํ๋ ํธ๋ค๋ฌ ์ด๋ํฐ์ธ @RequestMappingHandlerAdapter(์์ฒญ ๋งคํ ํจ๋ค๋ฌ ์ด๋ํฐ)์ ์๋ค.
ArgumentResolver ๋๋ถ์ ์ฐ๋ฆฌ๋ ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ -> ๋งค์ฐ ๋ค์ํ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ๊ฐ๋ฅ
- ex)
HttpServletRequest,Model,@RequestParam,@ModelAttriburte๊ฐ์ ์ ๋ ธํ ์ด์ ,@RequestBody,HttpEntity๊ฐ์ HTTP ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ- ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋
@RequestMappingAdapter๋ ๋ฐ๋ก ์ดArgumentResolver๋ฅผ ํธ์ถํด์ ์ปจํธ๋กค๋ฌ(ํธ๋ค๋ฌ)๊ฐ ํ์๋ก ํ๋ ๋ค์ํ ํ๋ผ๋ฏธํฐ์ ๊ฐ(๊ฐ์ฒด)์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ด ๋ชจ๋ ์ค๋น๋๋ฉด ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๋ฉด์ ๊ฐ์ ๋๊ฒจ์ค๋ค.
์ฐธ๊ณ
- ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ ๋ชฉ๋ก ๊ณต์ ๋ฉ๋ด์ผ
- https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/arguments.html
์ ํํ๋ HandlerMethodArgumentResolver์ธ๋ฐ ์ค์ฌ์ ArgumentResolver๋ผ๊ณ ๋ถ๋ฅธ๋ค.
public interface HandlerMethodArgumentResolver {
boolean supportsParameter(MethodParameter parameter);
@Nullable
Object resolveArgument(MethodParameter parameter, @Nullable
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, @Nullable WebDataBinderFactory
binderFactory) throws Exception;
}
ArgumentResolver์ supportsParameter()๋ฅผ ํธ์ถํด์ ํด๋น ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ํ๋์ง ์ฒดํฌํ๊ณ , ์ง์ํ๋ฉด resolverArgument()๋ฅผ ํธ์ถํด์ ์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ปจํธ๋กค๋ฌ ํธ์ถ์ ๋์ด๊ฐ๋ ๊ฒ.
HandlerMethodReturnValueHandler๋ฅผ ์ค์ฌ์ ReturnValueHandler๋ผ ๋ถ๋ฅธ๋ค. ArgumentResolver์ ๋น์ทํ๋ฐ, ์ด๊ฒ์ ์๋ต ๊ฐ์ ๋ณํํ๊ณ ์ฒ๋ฆฌํ๋ค.์ฐธ๊ณ
- ๊ฐ๋ฅํ ์๋ต ๊ฐ ๋ชฉ๋ก
- https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/return-types.html

HTTP ๋ฉ์์ง ์ปจ๋ฒํฐ๋ ์ด๋์ฏค์ ์์นํ ๊น?
@RequestBody๋ ์ปจํธ๋กค๋ฌ๊ฐ ํ์๋ก ํ๋ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ์ฌ์ฉ๋๋ค.@ResponseBody์ ๊ฒฝ์ฐ๋ ์ปจํธ๋กค๋ฌ์ ๋ฐํ ๊ฐ์ ์ด์ฉํ๋ค.์์ฒญ์ ๊ฒฝ์ฐ
@RequestBody๋ฅผ ์ฒ๋ฆฌํ๋ArgumentResolver๊ฐ ์๊ณ ,HttpEntity๋ฅผ ์ฒ๋ฆฌํ๋ArgumentResolver๊ฐ ์๋ค. ์ดArgumentResolver๋ค์ด HTTP ๋ฉ์์ง ์ปจ๋ฒํฐ๋ฅผ ์ฌ์ฉํด์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ
์๋ต์ ๊ฒฝ์ฐ
@ResponseBody์HttpEntity๋ฅผ ์ฒ๋ฆฌํ๋ReturnValueHandler๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์์ HTTP๋ฉ์์ง ์ปจ๋ฒํฐ๋ฅผ ํธ์ถํด์ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ ๋ค.
์คํ๋ง MVC๋
@RequestBody@ResponseBody๊ฐ ์์ผ๋ฉดRequestResponseBodyMethodProcessor(ArgumentResolver, ReturnValueHandler ๋๋ค ๊ตฌํ) HttpEntity๊ฐ ์์ผ๋ฉดHttpEntityMethodProcessor(ArgumentResolver, ReturnValueHandler ๋๋ค ๊ตฌํ)๋ฅผ ์ฌ์ฉํ๋ค.
์ฐธ๊ณ
HttpMessageConverter๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ํ๋ฒ ํ์ธํด๋ณด๊ธฐ
HandlerMethodArgumentResolverHandlerMethodReturnValueHandlerHttpMessageConverter
- ์ฌ์ค์ ์คํ๋ง์ด ํ์ํ ๋๋ถ๋ถ์ ์ ๊ณตํจ.
- ๊ธฐ๋ฅ ํ์ฅ์
WebMvcConfigurer๋ฅผ ์์ ๋ฐ์์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก- ์ค์ ์์ฃผ ์ฌ์ฉํ์ง๋ ์์ผ๋ ์ค์ ๊ธฐ๋ฅ ํ์ฅ์ด ํ์ํ๋ฉด
WebMvcConfigurer๊ฒ์ํด๋ณด์.