Razl-Dazl

eyecatch

OKHttpでクエリパラメータに配列を渡す

Posted at — 2023-03-16

大それたことじゃないのに何で調べても出てこないんだ・・・?

types[] Array of String. Types to include in the result.

MastodonのAPIを叩くのにクエリで配列を渡す場面が出てきたのですが

配列をtoString()とかして直接渡しても上手くいきません

キーをtypes[0]とかtypes[1]とか指定して渡しても上手くいきません

正しい書き方が分からず悪戦苦闘していました

試行錯誤してたらうまくいったのでとりあえず答えを載せてしまいます

val urlBuilder =url.newBuilder().apply {  
    addQueryParameter("types[]", "follow")  
    addQueryParameter("types[]", "mention")  
}

このように同じキーを使って値を複数回渡すとうまくいきます 気持ち悪ッ・・・

今まで、HashMapにキーと値セットしてそれをクエリパラメータとして渡す、という方法を取っていたので同じキーを使用するという発想に辿り着くまでそれなりの時間を溶かしました 辛い

val types = arrayOf("follow", "mention")

val urlBuilder =url.newBuilder().apply {
	types.forEach { addQueryParameter("types[]", it) } 
}

クエリが最初から配列として準備されてるならこんな感じですかね・・・

あとは適当にbuild()してリクエストを投げるだけ!

Author@zakuro

Mastodon: 396@vivaldi.net