[Spring Boot] unsupported media type 415 error (RequestBody, ModelAttribute, RequestParam) ์˜ค๋ฅ˜

ํ™์˜ํ™˜ยท2024๋…„ 1์›” 7์ผ
post-thumbnail

๐Ÿ“Œ ์ƒํ™ฉ

์‚ฌ์šฉ์ž๋กœ String ๊ฐ’๋งŒ์„ ๋ฐ›๋‹ค๊ฐ€ ์ด๋ฏธ์ง€ ํŒŒ์ผ๊นŒ์ง€ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ˆ˜์ • ํ›„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ...

"status": 415,
"error": "Unsupported Media Type",

๐Ÿ“Œ ์˜ค๋ฅ˜๋‚ด์šฉ

์›๋ž˜ jsonํ˜•ํƒœ๋กœ String ํƒ€์ž…์ธ title, content๋ฅผ ๋ณด๋‚ผ ๋•Œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™์„ ํ–ˆ๋Š”๋ฐ ํด๋ผ์ด์–ธํŠธ์—์„œ Stringํƒ€์ž…์˜ ๊ฐ’๋“ค๊ณผ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋™์‹œ์— ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด formdata๋กœ ๋ณ€๊ฒฝํ•˜์˜€๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

๐Ÿ“Œ ์›์ธ

@RequestBody์— ๊ด€๋ จ๋œ ์˜ค๋ฅ˜์˜€๋‹ค. ์˜ค๋ฅ˜ ๋ฌธ๊ตฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € "Content-Type"์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

Content-Type์ด๋ž€

์‘๋‹ต ๋‚ด์— ์žˆ๋Š” Content-Type ํ—ค๋”๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ
๋ฐ˜ํ™˜๋œ ์ปจํ…์ธ ์˜ ์ปจํ…์ธ  ์œ ํ˜•์ด ์‹ค์ œ๋กœ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ฆ‰, ์‘๋‹ตํ—ค๋”์— ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ์‘๋‹ต์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์œ ํ˜•์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
1. application/json

  • ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ Json์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

2. application/x-www-form-urlencoded

  • form ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ input์˜ ๊ฐ’์„ "key=value&key=value" ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋‚ ๋ฆฝ๋‹ˆ๋‹ค.

3. multipart/form-data

  • ์‘๋‹ต ๋ฐ์ดํ„ฐ์— ํŒŒ์ผ์ด ์ฒจ๋ถ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„ ์ „์†ก์„ ํ•  ๋•Œ ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • @RequestParam
  • @RequestBody
  • @ModelAttribute

@RequestParam

๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
Content-Type์ด application/json ์ด๋“ ,mulipart/form-data ์ƒ๊ด€ ์—†์ด ๋™์ผํ•˜๊ฒŒ key์— ๋งค์นญ๋˜๋Š” ํ•˜๋‚˜์˜ ํ•„๋“œ ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

@RequestBody

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ Json ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Java์˜ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ค€๋‹ค.
Content-Type์ด application/json์ด์–ด์•ผ ํ•œ๋‹ค.

@ModelAttribute

form ๋ฐ์ดํ„ฐ (๋ฌธ์ž, ์ด๋ฏธ์ง€ํŒŒ์ผ ๋“ฑ)์„ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
Content-Type์ด multipart/form-data ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.
์ด ๋•Œ @ModelAttribute ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ Java ๊ฐ์ฒด์™€ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ์œ„ํ•ด์„œ Setter ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ์— Setter ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ“Œ ๊ฒฐ๋ก 

@ReqeustBody์˜ Content-Type์€ application/json ํ˜•์‹์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋‚˜์™€์žˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ Postman์—์„œ ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š”๊ฑฐ๋Š” multipart/form-data ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด๊ณ  ์žˆ์—ˆ๋‹ค.
multipart/form-data ํ˜•์‹์„ DTO๋กœ ๋ฐ›์œผ๋ ค๋ฉด @ModelAttribute๋กœ ๋ฐ›์•„์•ผํ•œ๋‹ค!!

profile
์•ˆ๋…•ํ•˜์„ธ์š”

0๊ฐœ์˜ ๋Œ“๊ธ€