Я нашел два метода как получить GET параметры, но есть вопросы.
1 способ
Можно получить из HttpRequest, но к сожалению нельзя получить какой-то конкретный параметр можно только получить все параметры в виде строки
req.query_string()
А дальше предлагается парсить эти параметры самостоятельно? Не могу понять в чем прикол, для веб фреймворка это очень частая операция,
неужели такая возможность отсуствует во фреймворке?
2 способ
Предлагается определить структуру и в нее параметры распарсятся автоматически.
Вот пример из документации.
use actix_web::{get, web};
use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub struct AuthRequest {
id: u64,
response_type: ResponseType,
}
#[get("/")]
async fn index(info: web::Query<AuthRequest>) -> String {
format!("Authorization request for id={} and type={:?}!", info.id, info.response_type)
}
С одной стороны что-то не хочется определять какие-то структуры за пределами хендлеров засоряя тем самым пространство имен.
Другая проблема, это то что если например папраметр отсуствует то сервер отдает HTTP 400, что логично, а саму ошибку он отдает просто текстом.
Как можно сделать, чтобы завернуть эту ошибку в JSON нужного формата?