About Json with MultipartFile
221024 TIL
Mention : Winter is coming๐ฅถ ์์นจ์ ์ถฅโฆ.์ถฅ๋ค! ์๊ฐ๋ ๋, ๊น๋ธ๋ก๊ทธ๋ก ์ ํํด์ผ๊ฒ ๋ค๐ก
Acheivement & Problem : ์ด์ ๊ตฌํํ๋ AWS S3๋ฅผ ์ด์ฉํ ์ด๋ฏธ์ง ์ ๋ก๋๊ธฐ๋ฅ์ ์ค์ ํ๋ก์ ํธ์ ์ ์ฉ & ๊ตฌํํด๋ณด์๋ค.
์ด์ ๋ MultipartFile๋ง Body์ ๋ฐ์์ Post API๋ฅผ ๊ตฌํํ๋๋ฐ, ํ๋ก์ ํธ์์๋ JSON ํ์ ์ ๋ฐ์ดํฐ๋ ๋ฐ์์
Post API๋ฅผ ๊ตฌํํด์ผํ๋ค. ๊ฒ์๊ธ์ ์ ๋ชฉ, ๋ด์ฉ, ์ ์ ๋ค์์ JSON MediaType, ์ด๋ฏธ์งํ์ผ์ MULTIPART MediaType ์ด๋ฐ ๊ตฌ์กฐ์ด๋ค.
์๋ฌ์ ์์ธ์ ๋นจ๋ฆฌ ํ์ ํ ๊ฑฐ ๊ฐ์๋ฐ, ์ ์ฉ์ค Configure Bean? ์ ์ด๋์ง ์์๋๋ฐ ์ด๋ฌํ ์๋ฌ๊ฐ ๋ฐ์๐คฏ
๊ธฐ์กด ์๋ฐ ํด๋์คํ์ผ์ ์ง์ฐ๊ณ ๋ค์ ์ฐ๊ณ ํ๋ ๊ณผ์ ์ค์ not founded ์๋ฌ๋ก ๋ฐ์ํ ๋ฌธ์ ์ธ๋ฏ ์ถ๋ค.
Gradle์ ๋ค์ด๊ฐ์ Clean -> Build๋ฅผ ํด์ฃผ๋ฉด ๊น๋ํ๊ฒ ์ฒญ์๋๋ค. ์ด์งธ์ ์งธ ํด๊ฒฐํ๊ณ ๋ ๊ฐ์ง ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์
๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ Postman ํ ์คํธ & AWS S3 Bucket์ ์ ์ฅ๋๋ ๊ฒ ๊น์ง ํ์ธ์๋ฃ๐ฅ
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๊น์ง ๋ฐ์ดํฐ์ ํ๋ฆ & HTTP ์ ๋ํด์ ์ ํํ ์์๋ฌ์ผ ์ค๋๊ณผ ๊ฐ์ ์๋ฌ์ ๊ทผ๋ณธ ์์ธ์ ๋น ๋ฅด๊ฒ
ํด๊ฒฐํ ์ ์์ ๊ฒ์ด๋ค๐
์ค๋ ๊ตฌํํ๋, API์์ Json๊ณผ MultipartFile์ ํ๋ฒ์ ์ ๋ฌ ๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก API์์ ํด๋ผ์ด์ธํธ์๊ฒ ๊ฐ์ ์ ๋ฌ๋ฐ๊ธฐ ์ํด์ @RequestBody๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๋๋ก ๊ตฌํํ๋ค.
ํ์ง๋ง, Multipartfile์ ๋ฏธ๋์ดํ์ ์ด ๋ฌ๋ผ @RequestBody๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ๋ฐ์ ์๊ฐ ์๋ค.
@RequestPart๋ฅผ ์ฌ์ฉํ๋ฉด Json & MultipartFile ๋ฏธ๋์ด ํ์ (ํ์ผ)์ ๋ ๋ค ๋ฐ์ ์ ์๋ค.
์ด๋ API์์ consumeํ MediaType์ ์๋์ ์ฝ๋์ ๊ฐ์ด ์ง์ ํด์ค์ผ ํ๋ค. ๋ง์ฝ ์ ์ ํ MediaType๋ฅผ ์ง์ ํ์ง
์์ ๊ฒฝ์ฐ 415 Unsupported MediaType ERROR์ ์ธ์ฌํ๊ฒ ๋๋ค๐คฏ
@PostMapping(value = "/api/article", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity<?> createArticle(@RequestPart ArticleRequestDto requestDto, @RequestPart MultipartFile multipartFile) throws IOException {
return ResponseEntity.ok(articleService.createArticle(requestDto, multipartFile));
}
Leave a comment