gpt4 book ai didi

rust - 如何在 actix-web 中接收多个具有相同名称的查询参数?

转载 作者:行者123 更新时间:2023-12-03 11:35:16 27 4
gpt4 key购买 nike

actix-web documentation is only an example如何接收唯一命名的查询参数。

但是我如何接收同名的多个查询参数呢?例如:

http://localhost:8088/test?id=1&id=2&id=3

我必须如何更改以下代码才能接受多个 ID,我该如何读取它们?

use actix_web::web;
use serde::Deserialize;

#[derive(Deserialize)]
struct Info {
id: String,
}

#[get("/test")]
async fn index(info: web::Query<Info>) -> impl Responder {
println!("Id: {}!", info.id);

"ok"
}

最佳答案

看看this question ,似乎您想要的东西没有明确的标准。不知道actix有没有这样的提取器。我会处理我的 Deserialize impl。

use std::fmt;
use serde::de::{ Deserialize, Deserializer, Visitor, MapAccess};

impl<'de> Deserialize<'de> for Info {
fn deserialize<D>(deserializer: D) -> Result<Info, D::Error>
where
D: Deserializer<'de>,
{
struct FieldVisitor;

impl<'de> Visitor<'de> for FieldVisitor {
type Value = Info;

fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("`id`")
}

fn visit_map<V>(self, mut map: V) -> Result<Info, V::Error>
where
V: MapAccess<'de>
{
let mut ids: Vec<String> = Vec::default();
while let Some(key) = map.next_key()? {
match key {
"id" => {
ids.push(map.next_value::<String>()?)
}
_ => unreachable!()
}
}
Ok(Info {
id: ids
})
}
}
deserializer.deserialize_identifier(FieldVisitor)
}
}

#[derive(Debug)]
struct Info {
id: Vec<String>,
}

关于rust - 如何在 actix-web 中接收多个具有相同名称的查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63844460/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com