actix_web如何處理JSON請(qǐng)求? react json view
Vevor工具優(yōu)選跨境問(wèn)答2025-07-159001
在Actix Web中,處理JSON請(qǐng)求需要使用json
middleware。以下是一個(gè)簡(jiǎn)單的示例:
use actix_web::{web, App, HttpServer, Responder};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Serialize)]
struct Person {
name: String,
age: i32,
}
#[derive(Deserialize)]
struct JsonResponse {
message: String,
}
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
let handler = web::get().to_handler(|req| {
let mut person = Person {
name: req.path().to_string(),
age: 18,
};
if let Some(person_data) = req.body()?.as_bytes() {
let deserialized_person = serde_json::from_slice(person_data).unwrap();
person = deserialized_person;
}
let json_response = JsonResponse {
message: format!("Hello {}!", person.name),
};
Ok(json_response)
});
HttpServer::new(|| {
App::new()
.route("/", web::get().to(handler))
.service(PersonService::new())
})
.bind("0.0.0.0:8080")?
.run()
.await?;
Ok(())
}
#[derive(Serialize)]
struct PersonService {
persons: HashMap<String, Person>,
}
impl PersonService {
fn new() -> Self {
PersonService {
persons: HashMap::new(),
}
}
}
在這個(gè)示例中,我們首先定義了一個(gè)Person
結(jié)構(gòu)體和一個(gè)JsonResponse
結(jié)構(gòu)體。然后,我們創(chuàng)建了一個(gè)JsonResponse
middleware來(lái)處理JSON請(qǐng)求。接下來(lái),我們創(chuàng)建了一個(gè)新的PersonService
來(lái)存儲(chǔ)和檢索人員數(shù)據(jù)。最后,我們使用HttpServer
和App
構(gòu)建了一個(gè)簡(jiǎn)單的Web服務(wù)器,并綁定到端口8080。
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。
評(píng)論列表

在上述代碼中,如果請(qǐng)求的路徑是"/persons",那么服務(wù)器會(huì)返回一個(gè)空的JSON響應(yīng),請(qǐng)問(wèn),如何修改這個(gè)響應(yīng),使其包含所有人員的信息?