чтобы в ответе с ошибкой был json: “error”: “error text”?
ой, а он мне выдает что error.unwrap() пустой =( что делать?
#[instrument("Running application", skip(listener, pool))]
pub fn run(listener: TcpListener, pool: PgPool) -> Result<actix_web::dev::Server, std::io::Error> {
let pool = web::Data::new(pool);
let server = actix_web::HttpServer::new(move || {
let query_config = web::QueryConfig::default().error_handler(|err, _req| {
let error = err.error_response().error().unwrap().to_string();
let json_body = serde_json::json!({
"error": error,
});
let response = HttpResponse::BadRequest().json(json_body);
error::InternalError::from_response(err, response).into()
});
actix_web::App::new()
.wrap(tracing_actix_web::TracingLogger::default())
.route("/health_check", web::get().to(routes::health_check))
.route("/sales", web::get().to(routes::sale))
.route("/paid", web::get().to(routes::paid))
.route("/nft_tokens", web::get().to(routes::nft_tokens))
.app_data(pool.clone())
.app_data(query_config)
})
.listen(listener)?
.run();
Ok(server)
}
Может попробовать использовать thiserror для самих ошибок, а потом написать структуру с derive(Serialize), добавить туда поле error и сделать impl Into<MyErrorStruct>
не понимаю, web::Query<T> делает десериализацию в структуру. когда происходит ошибка десериализации мне нужно отловить ее и отдать в респонс как json “error”: “<error text>”. для этого вроде и существует QueryConfig
Обсуждают сегодня