반응형
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
)
}
}
반응형
'Kotlin' 카테고리의 다른 글
DID 스터디 3회차(kotlin let/run/also/apply/with) (0) | 2023.03.18 |
---|---|
fixture monkey BuilderGroups (0) | 2021.12.27 |
코틀린 재귀호출 최적화(Tail-Call) (0) | 2021.12.16 |
fixture monkey 로 예외 발생 테스트 (0) | 2021.12.15 |