如何在 Rocket 中将自定义 headers 添加到 content::JSON?

How to add custom headers to content::JSON in Rocket?

假设我在 rocket (v. 0.5.0-rc.1) 中有这个路由处理程序:

#[get("/route")]
pub async fn my_route() -> content::Json<String> {
    let json =
        rocket::serde::json::serde_json::to_string(&my_data).unwrap();
    content::Json(json)
}

如何向响应添加另一个 header(除了 content-type: application/json)?

我想到了类似的方法,但它不起作用:

#[get("/route")]
pub async fn my_route() -> content::Json<String> {
    let json =
        rocket::serde::json::serde_json::to_string(&my_data).unwrap();
    let mut content = content::Json(json);
    content.set_raw_header("Cache-Control", "max-age=120");
    content
}

我可以使用原始 rocket::Response 并自己设置 content-type: application/json header,但我无法弄清楚如何设置 body没有 运行 生命周期问题的可变长度字符串。

您可以使用 JSON 字符串获得原始响应,如下所示:

let json =
    rocket::serde::json::serde_json::to_string(&[1, 2, 3]).unwrap();
let response = Response::build()
    .header(ContentType::JSON)
    .raw_header("Cache-Control", "max-age=120")
    .sized_body(json.len(), Cursor::new(json))
    .finalize();