API ๋ฌธ์๋ฅผ ๋ฐ์๋๋ฐ Request๊ฐ ์ด๋ ๊ฒ ๋์ด์๋ค๋ฉด,
์ฐ๋ฆฌ๋ Multipart ๋ฐ์ดํฐ๋ก ๋ณด๋ด์ค์ผ ํฉ๋๋ค.
๊ทธ๋ฅ @Body ์๋? ํ์์ฒ๋ผ Json์ผ๋ก ๋ณด๋ด์ผ์ง~ ํ๋ค๊ฐ๋
422 Unprocessable Entity ์๋ฌ๋ง ๋ฐ์ ์ ์์ต๋๋ค..
์ด๋ป๊ฒ ์์๋๊ตฌ์? ์ ๋ ์๊ณ ์ถ์ง ์์์ด์…
๊ฐ๋ฐ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Retrofit2 2.9.0
- okhttp3 4.11.0
POST๋ก ํธ์ถํ๋ฉฐ,
Request Body๋ type: String, img: String($binary)๊ฐ ์๊ตฌ๋๋ ์ํฉ์ ๋๋ค.
Api Interface ์ฝ๋๋ ์๋์ ๊ฐ์ด ์์ฑํ์์ต๋๋ค.
@Multipart
@POST("transform")
suspend fun request(
@Part("type") type: RequestBody,
@Part img: MultipartBody.Part
): Response<ResponseBody>
@Multipart ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๊ณ
ํ์ํ body ํ๋ผ๋ฏธํฐ์ ๊ฐ๊ฐ @Part ์ด๋ ธํ ์ด์ ๋ ๋ฌ์์ค๋๋ค.
๋๋ค multipart/form-data ์ธ๋ฐ RequestBody๋ MultipartBody.Part ๋ก ๋ค๋ฅด๊ฒ ์จ์ค ์ด์ ๋
MultipartBody.Part ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฏธ์ง์ ๊ฐ์ ํ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉ๋๊ณ ,
RequestBody ๋ ์ผ๋ฐ์ ์ผ๋ก ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
MultipartBody.Part์ ๋ณธ๋ฌธ์ด RequestBody์ด๋ผ์ ๊ทธ๋ ์ต๋๋ค..
class Part private constructor(
@get:JvmName("headers") val headers: Headers?,
@get:JvmName("body") val body: RequestBody
)
๋ฌธ์์ด ๋ฐ์ดํฐ๋ MultipartBody.Part ๋ก ๋ณด๋ด๋ ๊ฒ ๊ฐ๋ฅ์ ํ์ง๋ง ๋นํจ์จ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
(์ด ๋ถ๋ถ์ด ๊ฐ์ธ์ ์ผ๋ก ์ดํด๊ฐ ๋์ง ์์์ ์ฐพ์๋ดค๋๋ฐ,,
ํธ์ง(Request)์ ๊ธ์ ์ฐ๋๊ฒ๊ณผ ์ฌ์ง์ ๋ถ์ด๋ ๊ฑธ๋ก ์๊ฐํ๋ฉด ์ผ์ถ ์ดํด๊ฐ ๋๋๋ผ๊ตฌ์,,?
๊ธ์ ๊ทธ๋ฅ ๋ฐ๋ก ์ธ ์ ์๋๋ฐ ์ฌ์ง์ ๋ญ ์ธํํ๊ณ ๋ถ์ด๊ณ .. ํ๋ ์ถ๊ฐ ์์ …)
๊ทธ๋ฆฌ๊ณ ์ด๊ฑธ ๋ณด๋ด์ฃผ๋ ์ฒ๋ฆฌ๋ถ๋ถ์ ๋๋ค.
suspend fun request(
type: String,
image: Bitmap,
): ResultData<ByteArray?> {
val typePart = type.toRequestBody("text/plain".toMediaTypeOrNull())
val imgByteArray = image.toByteArray()
val imgRequestBody = faceByteArray.toRequestBody("image/png".toMediaTypeOrNull())
val imgPart =
MultipartBody.Part.createFormData("img", "image.png", imgRequestBody)
return apiCall {
api.request(
type = typePart,
img = imgPart
)
}
}
๋ฌธ์์ด์ธ type์ ๊ฒฝ์ฐ๋ RequestBody๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ ์ ๊ฒฝ์ฐ๋ Bitmap ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ด์ผํ์ด์
- byteArray๋ก ๋ณํํด์ฃผ๊ณ
- RequesetBody๋ก ๋ง๋ ๋ค์
- MultipartBody.Part ๋ฐ์ดํฐ๋ก ํฌ์ฅํด์ฃผ๋ ์์ ์ ๊ฑฐ์นฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐํ๊ฐ์ด ResultData<ByteArray?> ์ธ ์ด์ ๋ Response ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ์ง ํ์ผ์ด๋ผ ๊ทธ๋ ์ต๋๋ค ๐ฅฒ
์ด๋ ๊ฒ ํด์ 200 OK ๋ฅผ ๋ฐ์ผ๋ฉด ๋ !
์๋ฌด๋๋ multipart/form-data ๊ฐ ํ์ผ ์ ์กํ ๋ ํ์ํ ํ์์ธ ๊ฒ ๊ฐ์๋ฐ ๋๋ ๋ฏ์ค๊ณ ,,
๊ฒฐ๊ณผ ์ฝ๋๋ง ๋ณด๋ฉด ๊ฐ๋จํ๋ฐ,, ์ฝ์ง ์์ฒญ ํ๊ฑฐ๊ณ ,,
ํ๋์ฐจ์ด๊ฐ ์ฝ์ง ์๋ค์
๐ฅฒ