RequestEntity
Http ์์ฒญ ๋ณธ๋ฌธ ์ฒ๋ฆฌ ์ดํด
HTTP ์์ฒญ์ด ํ๋ผ๋ฏธํฐ๋ ํผ ๋ฐ์ดํฐ๊ฐ ์๋ ์์ฒญ ๋ณธ๋ฌธ(body)์ผ ๊ฒฝ์ฐ
@RequestParam์ด๋@ModelAttribute๋ ์์ฒญ์ ๋งค๊ฐ๋ณ์์ ๋ฐ์ธ๋ฉ ํ ์ ์๋ค.์ผ๋ฐ์ ์ผ๋ก ํค๋ ์ ๋ณด๊ฐ
Content-Tpye = application/json์ธ ๊ฒฝ์ฐ HTTP ๋ณธ๋ฌธ ์์ฒญ์getParameter()๋ก ์ฝ์ ์ ์์ผ๋ฉฐ ์ง์ HttpServletRequest์InputStream๋๋Reader๋ฅผ ์ฌ์ฉํด์ ๋ณธ๋ฌธ ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
HttpEntity
HttpEntity๋ ๊ธฐ์กดHttpServletRequest๋HttpServletResponse๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ๋ฐ ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ๋์๋ค.HttpHeaders์Body๋ฐ์ดํฐ๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ํตํฉํ์๊ณ JSON, XML, ๋ฌธ์์ด, ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ๋ฑ ๋ค์ํ ๋ณธ๋ฌธ ๋ฐ์ดํฐ ํ์์ ์ฒ๋ฆฌ ๊ฐ๋ฅํ๊ฒ ํ์๋ค.๋ด๋ถ์ ์ผ๋ก
HttpMessageConverter๊ฐ์ฒด๊ฐ ์๋๋์ด ๋ณธ๋ฌธ์ ์ฒ๋ฆฌํ๋ค.


RequestEntity
HttpEntity์ ํ์ฅ ๋ฒ์ ์ผ๋ก HTTP ๋ฉ์๋์ ๋์ URL๋ ํฌํจํ์ฌ RestTemplate์์ ์์ฒญ์ ์ค๋นํ๊ฑฐ๋ ์ปจํธ๋กค๋ฌ ๋ฉ์๋์์ ์์ฒญ ์ ๋ ฅ์ ๋ํ๋ผ ๋ ์ฌ์ฉ๋๋ค.

ํ๋ฆ๋

@RequestBody
@RequestBody๋ HTTP ์์ฒญ ๋ณธ๋ฌธ(body)์ ์๋์ผ๋ก ๊ฐ์ฒด๋ก ๋งคํํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ๋ด๋ถ์ ์ผ๋กHttpMessageConverter๊ฐ์ฒด๋ก ๋ณธ๋ฌธ์ ์ฒ๋ฆฌํ๋ค.HttpEntity๋๋RequestEntity๋ ์์ฒญ ๋ณธ๋ฌธ์ ์ฒ๋ฆฌํด ์ฃผ์ง๋ง ์ง์ ๋ ๊ฐ์ฒด๋ก ์๋ ๋งคํ์ ํด์ฃผ์ง๋ ์๋๋ค.@Valid์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์์ฒญ ๋ณธ๋ฌธ์ ์ ํจ์ฑ์ ์ฝ๊ฒ ๊ฒ์ฆํ ์ ์๋ค.@RequestBody๋ ๋ฐ๋์ ์์ฒญ ๋ณธ๋ฌธ์ด ์์ด์ผ ํ๋ฉฐ ์์ฒญ ๋ณธ๋ฌธ์ด ์์ ๊ฒฝ์ฐHttpMessageNotReadableException์์ธ๊ฐ ๋ฐ์ํ๋ค.required = false์ค์ ์ผ๋ก ์์ฒญ ๋ณธ๋ฌธ์ด ์์ ๋ null์ ํ์ฉํ ์ ์๋ค.

@RequestBody์ HttpEntity(RequestEntity)

@RequestBody๋ ์์ฒญ์Content-Typeํค๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํHttpMessgaeConverter๋ฅผ ์ ํํ๊ธฐ ๋๋ฌธ์Content-Typeํค๋๊ฐ ์ ํํ๊ฒ ์ค์ ๋์ด์ผ ํ๋ค.@RequestBody๋ ์๋ตํ ์ ์๋ค. ์๋ตํ ๊ฒฝ์ฐ ๊ธฐ๋ณธํ์@RequestParam, ๊ฐ์ฒด ํ์ ์@ModelAttribute๊ฐ ์๋ํ๋ฉฐ ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ ์ ์๋ค.
ํ๋ฆ๋

HttpMessageConverter
HttpMessageConverter๋ HTTP ์์ฒญ๊ณผ ์๋ต์ ๋ณธ๋ฌธ(body) ๋ด์ฉ์ ๊ฐ์ฒด๋ก ๋ณํํ๊ณ ๋ฐ๋๋ก ๊ฐ์ฒด๋ฅผ HTTP ๋ฉ์์ง๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค์ด๋ค.HttpMessageConverter๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํํ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ์ฌ ์ฃผ๋ก JSON, XML, Plain Text์ ๊ฐ์ ๋ค์ํ ๋ฐ์ดํฐ ํฌ๋งท์ ์ง์ํ๋ค.HttpMessageConverter๋ ์ฃผ๋ก Rest API ํต์ ์์ ์ฌ์ฉ๋๋ค.


canRead(): ์ฃผ์ด์ง ๊ฐ์ฒด ํ์ ๊ณผ ๋ฏธ๋์ด ํ์ (Content-Type)์ ์ฝ์ ์ ์๋์ง ํ์ธํ๋ค.canWrite(): ์ฃผ์ด์ง ๊ฐ์ฒด ํ์ ๊ณผ ๋ฏธ๋์ด ํ์ (Content-Type)์ ๋ฐ์ดํฐ๋ฅผ ์ธ ์ ์๋์ง ํ์ธํ๋ค.read(): HTTP ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํ๋ค.getSupportedMediaTypes(): ํน์ ํด๋์ค ๋๋ ์ด ์ปจ๋ฒํฐ๊ฐ ์ง์ํ๋ ๋ฏธ๋์ด ํ์ ์ ๋ชฉ๋ก์ ๋ฐํํ๋ค.write(): ๊ฐ์ฒด๋ฅผ HTTP ์๋ต ๋ฐ์ดํฐ๋ก ๋ณํํ๋ค.
HttpMessageConverter ์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ

ํด๋ผ์ด์ธํธ Content-Type ํค๋
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ์ด๋ HTTP ํค๋์
Content-Type์ ํฌํจํ์ฌ ์๋ฒ์ ๋ฐ์ดํฐ ํ์์ ์๋ฆฐ๋ค.
ArgumentResolver ์คํ
์คํ๋ง์ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋ ๋งค๊ฐ๋ณ์์
@RequestBody๋๋HttpEntity๋ฑ์ด ์ ์ธ ๋์๋์ง ํ์ธํ๋ค.์ ์ธ ๋์๋ค๋ฉด HTTP ์์ฒญ ๋ณธ๋ฌธ
ArgumentResolver๊ฐ ์ ํ๋๊ณArgumentResolver๋HttpMessageConverter๋ฅผ ์คํํ๋ค.
HttpMessageConverter ์๋
HttpMessageConverter๋ ํด๋ผ์ด์ธํธ์Content-Typeํค๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฒญ ๋ณธ๋ฌธ ๋ฐ์ดํฐ๋ฅผ ํน์ ๊ฐ์ฒด๋ก ๋ณํํ๋ค.์๋ฅผ ๋ค์ด Text๋
StringHttpMessageConverter, JSON์MappingJackson2HttpMessageConverter๊ฐ ์๋๋๋ค.
HttpMessageConverter ์๋ต ์ฒ๋ฆฌ ํ๋ฆ

ํด๋ผ์ด์ธํธ Accept ํค๋
ํด๋ผ์ด์ธํธ๋
Acceptํค๋๋ฅผ ํตํด ์๋ฒ๊ฐ ์ด๋ค ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํด์ผ ํ๋์ง ๋ช ์ํ๋ค.
ReturnValueHandler ์คํ
์คํ๋ง์ ์ปจํธ๋กค๋ฌ์ ๋ฐํ ํ์ ์
@ResponseBody๋๋ResponseEntity๋ฑ์ด ์ ์ธ ๋์๋์ง ํ์ธํ๋ค.์ ์ธ ๋์๋ค๋ฉด HTTP ์๋ต ๋ณธ๋ฌธ
ReturnValueHandler๊ฐ ์ ํ๋๊ณReturnValueHandler๋HttpMessageConverter๋ฅผ ์คํํ๋ค.
HttpMessageConverter ์๋
HttpMessageConverter๋ ํด๋ผ์ด์ธํธ์Acceptํค๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ต ๋ณธ๋ฌธ์ ๊ธฐ๋กํ๋ค.์๋ฅผ ๋ค์ด Text๋
StringHttpMessageConverter, JSON์MappingJackson2HttpMessageConverter๊ฐ ์๋๋๋ค.
HttpMessageConverter ์์ฒญ ๋ฐ ์๋ต ๊ตฌ์กฐ

HttpMessageConverter๊ฐ ์๋ํ์ง ์๋ ์์ฒญ
GET์์ฒญ๊ณผ ๊ฐ์ ๋ณธ๋ฌธ์ด ์๋ ์์ฒญ
GET,DELETE์ ๊ฐ์ HTTP ๋ฉ์๋๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณธ๋ฌธ์ ํฌํจํ์ง ์์ผ๋ฏ๋ก ์ด๋HttpMessageConverter๋ ์๋ํ์ง ์๋๋ค.
Content-Typeํค๋๊ฐ ์ง์๋์ง ์๋ ์์ฒญ
POST,PUT๋ฑ์ ๋ณธ๋ฌธ์ด ํฌํจ๋ HTTP ์์ฒญ์ด๋ผ๋Content-Typeํค๋๊ฐ ์ง์๋์ง ์๋ ๋ฏธ๋์ด ํ์ ์ผ ๊ฒฝ์ฐHttpMessageConverter๋ ์๋ํ์ง ์๋๋ค.
@RequestParam,@ModelAttribute๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋
application/x-www-form-urlencodedํ์์ ํผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐHttpMessageConverter๋ ์๋ํ์ง ์๋๋ค.ํ์ผ ์ ๋ก๋ ์์ฒญ ์ค
@RequestPart๋๋MultipartFile์ ์ฌ์ฉํ ๊ฒฝ์ฐ
multipart/form-data์์ฒญ์์ ํ์ผ์ ์ ๋ก๋ ํ ๋,MultipartFile์ด๋@RequestPart๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋MultipartResolver๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.์ปจํธ๋กค๋ฌ์์ ๋จ์ ๋ฌธ์์ด ๋ฐํ ์
@ResponseBody๋@RestController๊ฐ ์๋ ๊ฒฝ์ฐ
๋ฐํ๋ ๋ฌธ์์ด์ ๋ทฐ ์ด๋ฆ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ด ๊ฒฝ์ฐ์๋
ViewResolver๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
Last updated