axumでVec<String>
を受け取ろうと思ったらうまくいかなかったので対処法メモ
対処法
axum_extra::extract::Query
を使うと受け取れます
サンプル
以下のようなGET関数に?values=value1&values=value2
のようなクエリパラメータを付与して実行した場合、クエリパラメータからうまくvalues
を受け取れませんでした
use axum::extract::Query;
async fn Hello(Query(params): Query<Payload>) -> Result<Response, StatusCode> {
~~~
}
struct Payload {
values: Vec<String>
}
調べるとaxum標準のQueryはパーサーが対応してない様子、、
https://github.com/tokio-rs/axum/discussions/1719
代わりにaxum_extraが使用できるそうです
serde_qsも使用可能(こっちはa[]のような配列記載にも対応している)なようなので、用途や好みで使い分けるとよさそうですね🥇
修正版は以下。簡単ですね❗
+ axum_extra::extract::Query;
async fn Hello(Query(params): Query<Payload>) -> Result<Response, StatusCode> {
~~~
}
struct Payload {
values: Vec<String>
}