如何从Rust火箭HTTP端点返回JSON?

问题描述

在Rust中通过Rocket返回Json的最简单方法是什么?

#[post("/route",data = "<data>")]
fn route(someVariable: String) -> String {
    // How can I return a json response here? {"a": "{someVariable}")
}

我尝试过:content::Json(),但对我来说似乎太静态了。

解决方法

如果您发现content::Json()太静态,则可以使用rocket_contrib软件包。使用此程序包将允许您传入从serde程序包中实现Deserialize的结构

use rocket_contrib::json::Json;
use serde::Deserialize;

#[derive(Deserialize)]
struct User {
  name: String,age: u8,alive: bool,}

#[post("/route",data = "<data>")]
fn route(someVariable: String) -> String {
    let user = User {
        name: "Jon Snow".to_string(),age: 21,alive: true,};
    Json(user_from_id)
}

确保将依赖项添加到Cargo.toml

serde = { version = "1.0",features = ["derive"] }
rocket_contrib = 0.4

有关robot_contrib https://api.rocket.rs/v0.4/rocket_contrib/json/struct.Json.html的更多信息