먼저 기존의 MultiPart API 파일이다.
@Multipart
@POST("API/REQUEST")
suspend fun postAPI(
@Path("API1") api1: Int,
@Part("API2") api2 : String,
@Part("API3") api3 : String,
@Part("API4") api4 : List<String>?,
@Part API5 : MultipartBody.Part
) : Response<ResponsePost>
위와 같은 방식으로 다른 파라미터들을 @Path 어노테이션과 String 형태로 담아서 보냈다.
그랬더니
API1 이라는 String에 김춘배를 담아서 보낸다면, "김춘배" 로 DB에 저장되는 현상이 발생했다.
왜 그럴까 고민을 해봤더니, Part형의 String을 서버에서 다시 인코딩 하는 과정에서 일어나는 이슈가 아닐까?
String을 곧바로, 즉 "" 가 붙어있는 상태 그 자체로 변수로 인식해서 그러는걸까?
등등 추측들이 난무했고, 결국 해결법을 찾았다.
@Multipart
@JvmSuppressWildcards
@POST("API/POST")
suspend fun postAPI(
@Path("API1") API1: Int,
@Part("API2") API2 : RequestBody,
@Part("API3") API3 : RequestBody,
@Part("API4") API4 : List<RequestBody>?,
@Part API5 : MultipartBody.Part
) : Response<ResponseAPI>
1. 우선 모든 @Part 어노테이션의 타입을 RequestBody로 변경해준다. List타입은 List<RequestBody> 의 형태로 변환한다.
다만 이미지는 그대로 MultipartBody.Part 타입을 유지한다.
fun String.textConverter() : RequestBody {
return this.toRequestBody("text/plain".toMediaTypeOrNull())
}
fun List<String>?.listConverter() : List<RequestBody>? {
return this?.map { it.toRequestBody("text/plain".toMediaTypeOrNull()) }
}
2. 위의 코드는 재활용을 위해 별도로 생성한 ConvertToRequestBody의 Object 코드이다.
String형 변수를 RequestBody로 변환하되, 타입은 이미지와는 다르게 "text/plain" 으로 설정한다.
3. 전송한다.
4. "가 떨어져있는 DB에 저장된 값들을 보며 뿌듯함을 느낀다.
'[개발] > [안드로이드_이슈 일기]' 카테고리의 다른 글
[Android] FCM 관련 팁 총 정리 (1) | 2023.08.12 |
---|---|
[Android] local.properties의 값 Manifest에서 사용하기 (2) | 2023.08.09 |
[Android] Fragment별 ViewModel? (1) | 2023.07.30 |
[Android] Bitmap 이미지 용량 줄이기 (0) | 2023.07.25 |
[Android] 커스텀 달력 만들기 기록 - 01 (1) | 2023.07.14 |