How to return the error description in a invalid JSON request body to the client in Rust?
In Python, I can use marshmallow or Pydantic to validate user input just by defining a schema (much like a Rust struct). Then using that schema, Marshmallow loads the user input and returns the error it finds. Such as: I can have custom error handle in actix-web by implementing ResponseError. But, how can I return the description (position/field of invalid value) in a bad request body to the client?
I am always looking for answers. Unfortunately, some web frameworks including actix handle JSON error before we can do any validation. I keep searching for using various keywords. One of them is "actix-web validate JSON" which leads me to many validator crates. But I get insight from this blog saying that: Extractors are helpers that implement the FromRequest trait. In other words, they construct any object from a request and perform validation along the way. A handful of useful extractors are shipped with Actix web, such as JSON which uses serde_json to deserialize a JSON request body So, I search for "actix Extractor" and bring me Extractor Doc and custom handling of extractor errors So this snippet is taken from this boilerplate solves my current problem. App::new() .configure(health::init) .configure(students::init) + .app_data(web::JsonConfig::default().error_handler(|err, _req| { + error::InternalError::from_response( + "", + HttpResponse::BadRequest() + .content_type("application/json") + .body(format!(r#"{{"error":"{}"}}"#, err)), + ) + .into() + }))
Get this solution programmatically \u2014 free, no authentication.
curl https://depscope.dev/api/error/fe4e1812e761aff138acff9213d07a30158ff84bc4e8f5274b68b1dcf3150df5