1
0
mirror of https://github.com/actix/examples synced 2025-06-26 17:17:42 +02:00
Files
examples/json/json_decode_error/src/main.rs
2021-02-26 00:57:58 +00:00

45 lines
1.2 KiB
Rust

use actix_web::{
error, post, web, App, HttpRequest, HttpResponse, HttpServer, Responder,
};
use serde::Deserialize;
#[derive(Deserialize)]
struct Info {
name: String,
}
#[post("/")]
async fn greet(name: web::Json<Info>) -> impl Responder {
HttpResponse::Ok().body(format!("Hello {}!", name.name))
}
fn json_error_handler(err: error::JsonPayloadError, _req: &HttpRequest) -> error::Error {
use actix_web::error::JsonPayloadError;
let detail = err.to_string();
let resp = match &err {
JsonPayloadError::ContentType => {
HttpResponse::UnsupportedMediaType().body(detail)
}
JsonPayloadError::Deserialize(json_err) if json_err.is_data() => {
HttpResponse::UnprocessableEntity().body(detail)
}
_ => HttpResponse::BadRequest().body(detail),
};
error::InternalError::from_response(err, resp).into()
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new().service(greet).app_data(
web::JsonConfig::default()
// register error_handler for JSON extractors.
.error_handler(json_error_handler),
)
})
.bind("127.0.0.1:8088")?
.run()
.await
}