Rust 如何在actix web中接收同名的多个查询参数?

Rust 如何在actix web中接收同名的多个查询参数?,rust,query-parameters,actix-web,Rust,Query Parameters,Actix Web,关于如何接收唯一命名的查询参数 但是,如何接收相同名称的多个查询参数?例如: http://localhost:8088/test?id=1&id=2&id=3 我必须如何更改以下代码,使其接受多个ID,以及如何读取它们 使用actix_web::web; 使用serde::反序列化; #[导出(反序列化)] 结构信息{ id:String, } #[获取(“/test”)] 异步fn索引(信息:web::Query)->impl响应程序{ println!(“Id:{}!”,

关于如何接收唯一命名的查询参数

但是,如何接收相同名称的多个查询参数?例如:

http://localhost:8088/test?id=1&id=2&id=3
我必须如何更改以下代码,使其接受多个ID,以及如何读取它们

使用actix_web::web;
使用serde::反序列化;
#[导出(反序列化)]
结构信息{
id:String,
}
#[获取(“/test”)]
异步fn索引(信息:web::Query)->impl响应程序{
println!(“Id:{}!”,info.Id);
“好的”
}
看一看,你想要什么似乎没有明确的标准。我不知道actix是否有这样的提取器。我将处理我的
反序列化
impl

使用std::fmt;
使用serde::de::{反序列化,反序列化程序,访问者,MapAccess};
impl获取信息{
fn反序列化(反序列化程序:D)->结果
哪里
D:反序列化程序访问者
{
让mut-id:Vec=Vec::default();
而让一些(键)=映射。下一个键(){
匹配键{
“id”=>{
id.push(map.next_值::()?)
}
_=>无法访问!()
}
}
好的(信息{
id:id
})
}
}
反序列化程序。反序列化\u标识符(FieldVisitor)
}
}
#[导出(调试)]
结构信息{
id:Vec,
}

不知道它是否有效,但您是否尝试将
id
声明为
Vec
?@masklin是的,我尝试过。然后我得到错误:
查询反序列化错误:无效类型:字符串“1”,在其他语言中应为序列
http://localhost:8088/test?id=1&id=2&id=3
无效,您需要执行
http://localhost:8088/test?id[]=1&id[]=2&id[]=3
。如果是help.Ah,看起来serde_qs有一个更规范的PHP风格格式,您需要指定qs键用于数组。您可能需要使用和一些可以返回名称和值的原始“对”的东西来“手动”它,例如url或qstring。或者,如果您控制客户端,则使用PHP样式的格式(只需调用字段/param
id[]
而不是
id
),谢谢您的输入。但是当我尝试
http://localhost:8088/test?id[]=1&id[]=2&id[]=3
,我得到错误:查询反序列化错误:缺少字段
id
。我还发现了一个相关的问题,似乎还没有简单的解决方案。我想我将只使用一个字符串作为带有自定义分隔符的qp,然后拆分ID。