✨ Añade soporte a respuestas JSON
This commit is contained in:
parent
d85458d357
commit
2dfca51c31
3 changed files with 45 additions and 2 deletions
|
@ -34,7 +34,7 @@ pub use crate::locale::*;
|
||||||
pub use crate::datetime::*;
|
pub use crate::datetime::*;
|
||||||
|
|
||||||
pub use crate::service;
|
pub use crate::service;
|
||||||
pub use crate::service::HttpRequest;
|
pub use crate::service::{HttpRequest, HttpResponse};
|
||||||
|
|
||||||
pub use crate::core::{AnyCast, AnyInfo, TypeInfo};
|
pub use crate::core::{AnyCast, AnyInfo, TypeInfo};
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ pub use crate::core::component::*;
|
||||||
pub use crate::core::extension::*;
|
pub use crate::core::extension::*;
|
||||||
pub use crate::core::theme::*;
|
pub use crate::core::theme::*;
|
||||||
|
|
||||||
pub use crate::response::{redirect::*, ResponseError};
|
pub use crate::response::{json::*, redirect::*, ResponseError};
|
||||||
|
|
||||||
pub use crate::base::action;
|
pub use crate::base::action;
|
||||||
pub use crate::base::component::*;
|
pub use crate::base::component::*;
|
||||||
|
|
|
@ -2,4 +2,6 @@
|
||||||
|
|
||||||
pub use actix_web::ResponseError;
|
pub use actix_web::ResponseError;
|
||||||
|
|
||||||
|
pub mod json;
|
||||||
|
|
||||||
pub mod redirect;
|
pub mod redirect;
|
||||||
|
|
41
src/response/json.rs
Normal file
41
src/response/json.rs
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
//! Extractor y generador de respuestas JSON (reexporta [`actix_web::web::Json`]).
|
||||||
|
//!
|
||||||
|
//! # Uso como extractor JSON
|
||||||
|
//!
|
||||||
|
//! Convierte automáticamente el cuerpo de una petición con `Content-Type: application/json` en un
|
||||||
|
//! tipo Rust fuertemente tipado, validando el formato y deserializando con *serde*.
|
||||||
|
//!
|
||||||
|
//! ```rust
|
||||||
|
//! use pagetop::prelude::*;
|
||||||
|
//!
|
||||||
|
//! #[derive(serde::Deserialize)]
|
||||||
|
//! struct NuevoUsuario { nombre: String, email: String }
|
||||||
|
//!
|
||||||
|
//! // Manejador configurado para la ruta POST "/usuarios".
|
||||||
|
//! async fn crear_usuario(payload: Json<NuevoUsuario>) -> HttpResponse {
|
||||||
|
//! // `payload` ya es `NuevoUsuario`; si la deserialización falla,
|
||||||
|
//! // devolverá automáticamente 400 Bad Request con un cuerpo JSON que describe el error.
|
||||||
|
//! HttpResponse::Ok().finish()
|
||||||
|
//! }
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! # Uso como generador de respuestas JSON
|
||||||
|
//!
|
||||||
|
//! Serializa valores Rust a JSON y genera una respuesta HTTP con el encabezado apropiado
|
||||||
|
//! `application/json; charset=utf-8`, todo con una llamada compacta.
|
||||||
|
//!
|
||||||
|
//! ```rust
|
||||||
|
//! use pagetop::prelude::*;
|
||||||
|
//!
|
||||||
|
//! #[derive(serde::Serialize)]
|
||||||
|
//! struct Usuario { id: u32, nombre: String }
|
||||||
|
//!
|
||||||
|
//! async fn obtener_usuario() -> Json<Usuario> {
|
||||||
|
//! Json(Usuario { id: 1, nombre: "Ada".into() })
|
||||||
|
//! }
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! `Json<T>` funciona con cualquier tipo que implemente `serde::Serialize` (para respuestas) y/o
|
||||||
|
//! `serde::Deserialize` (para peticiones).
|
||||||
|
|
||||||
|
pub use actix_web::web::Json;
|
Loading…
Add table
Add a link
Reference in a new issue