Kotlin
form data 를 string으로 변환하기
ybs
2021. 11. 15. 01:08
반응형
content type application/x-www-form-urlencoded 으로 request body를 보낼 때 key=value 쌍 string 을 만들기 위한 코틀린 코드다. List<Pair<String, String>> 데이터 구조를 string 으로 만드는 encode 함수가 핵심이다. 추가적으로 item list를 FormData 로 만들어 flatten 시키는 부분도 있다.
typealias FormData = List<Pair<String, String>>
class FormDataTest {
@Test
fun formDataToString() {
val baseFormData = getBaseForm()
val itemFormData = listOf(
Item("1", "food"),
Item("2", "cloth")
).map { it.toFormData() }.flatten()
assertEquals(
"id=1&name=ybs&gender=m&job=developer&itemId=1&itemCode=food&itemId=2&itemCode=cloth",
(baseFormData + itemFormData).encode()
)
}
private fun getBaseForm(): FormData {
val orderBaseForm = mutableListOf(
"id" to "1",
"name" to "ybs",
"gender" to "m"
)
// 추가로 add 할수도 있음
orderBaseForm.add("job" to "developer")
return orderBaseForm
}
private fun FormData.encode(): String {
return this
.mapNotNull { (key, value) ->
try {
"${URLEncoder.encode(key, "UTF-8")}=${URLEncoder.encode(value, "UTF-8")}"
} catch (e: UnsupportedEncodingException) {
null
}
}
.joinToString("&")
}
data class Item(
val id: String,
val code: String
)
private fun Item.toFormData(): FormData {
return mutableListOf(
"itemId" to this.id,
"itemCode" to this.code
)
}
}
반응형