带有参数的 Rust Get 请求
Rust Get request with parameters
我在一个实现中有以下异步函数 #[async_trait]
pub async fn get_field_value(field: web::Path<String>, value: web::Path<String>) -> HttpResponse {
let json_message = json!({
"field": field.0,
"value": value.0
});
HttpResponse::Ok().json(json_message)
}
现在我有了路由器功能
pub fn init_router(config: &mut ServiceConfig){
config.service(web::resource("/get/field-value/{field}/{value}").route(web::get().to(get_field_value)));
}
然后当 运行 网络应用程序时:localhost:3000/get/field-value/name/James
我没有收到 Json 如果没有收到以下错误:
wrong number of parameters: 2 expected 1
我想我不应该得到这个错误,因为我正确地初始化了参数中的值。
#[async_trait]
都不允许我使用 #[get("/get/field-value/{field}/{value}")]
我认为路由处理程序被赋予一个包含路由模式中所有值的参数,而不是两个单独的字符串参数。您可以使用元组来获取两个值:
pub async fn get_field_value(field: web::Path<(String, String)>) -> HttpResponse
或者您可以使用 serde 为您反序列化路由模式中的字段:
#[derive(Serialize, Deserialize)]
pub struct Field {
pub field: String,
pub value: String,
}
pub async fn get_field_value(data: web::Path<Field>) -> HttpResponse {
let json_message = json!({
"field": data.field,
"value": data.value
});
HttpResponse::Ok().json(json_message)
}
我在一个实现中有以下异步函数 #[async_trait]
pub async fn get_field_value(field: web::Path<String>, value: web::Path<String>) -> HttpResponse {
let json_message = json!({
"field": field.0,
"value": value.0
});
HttpResponse::Ok().json(json_message)
}
现在我有了路由器功能
pub fn init_router(config: &mut ServiceConfig){
config.service(web::resource("/get/field-value/{field}/{value}").route(web::get().to(get_field_value)));
}
然后当 运行 网络应用程序时:localhost:3000/get/field-value/name/James
我没有收到 Json 如果没有收到以下错误:
wrong number of parameters: 2 expected 1
我想我不应该得到这个错误,因为我正确地初始化了参数中的值。
#[async_trait]
都不允许我使用 #[get("/get/field-value/{field}/{value}")]
我认为路由处理程序被赋予一个包含路由模式中所有值的参数,而不是两个单独的字符串参数。您可以使用元组来获取两个值:
pub async fn get_field_value(field: web::Path<(String, String)>) -> HttpResponse
或者您可以使用 serde 为您反序列化路由模式中的字段:
#[derive(Serialize, Deserialize)]
pub struct Field {
pub field: String,
pub value: String,
}
pub async fn get_field_value(data: web::Path<Field>) -> HttpResponse {
let json_message = json!({
"field": data.field,
"value": data.value
});
HttpResponse::Ok().json(json_message)
}