Open2
axumでcheckboxのPOST値を受け取る
問題点
axumでPOST値を受け取って処理をを作成していたら、checkboxの値が取得できない問題に遭遇する。
どうやら、axum::Form
では下記のような配列で受け取るようなことはできないらしい。
<input type="checkbox" name="options" value="option1"> Option 1<br>
<input type="checkbox" name="options" value="option2"> Option 2<br>
<input type="checkbox" name="options" value="option3"> Option 3<br>
Form受取部分コード抜粋
#[derive(Deserialize, Debug)]
struct FormParam {
#[serde(default)]
options: Vec<String>
}
async fn index(Form(form): Form<FormParam>) {
// 受け取れない optionsは空状態
}
解決策
色々調べてserde_html_form
でRequest値を処理するとかあったけど、ロジックをどうこうする必要ななく、axum-extra
クレートを使えば良いみたい。
Cargo.toml
axum-extra = {version = "任意のバージョン", features = ["form"]}
use axum_extra::extract::Form;
async fn index(Form(form): Form<FormParam>) {
// 受け取れた
}
axum-extra
は直ぐ側にいたのに存在に気づけていないだけだった。。ありがとうaxum-extra