【发布时间】:2022-09-24 12:33:26
【问题描述】:
我正在尝试将请求有效负载中的结构写入 kafka,为此我需要获取表示该结构的 Json 对象的字符串。目前,我正在使用实现来自rocket::serde::json 的反序列化和序列化特征的结构从请求中加载对象。
代码如下所示:
#[macro_use] extern crate rocket;
use rocket::serde::{Serialize, Deserialize};
use rocket::serde::json::Json;
use rdkafka::config::ClientConfig;
use rdkafka::producer::{BaseRecord, FutureProducer};
#[derive(Serialize, Deserialize)]
#[serde(crate = \"rocket::serde\")]
struct Credential {
metadata: String,
data: String,
}
#[post(\"/\", data=\"<c>\")]
async fn insert_credentials(c: Json<Credential>) -> &\'static str {
// Do stuff with c
let producer: &FutureProducer = &ClientConfig::new()
.set(\"bootstrap.servers\", \"kafka:9200\")
.set(\"message.timeout.ms\", \"5000\")
.create()
.expect(\"Producer creation error\");
let delivery_status = producer
.send(
FutureRecord::to(\"credentials_ingestion\")
.payload(Json(c).to_string())
.key(\"MyKey\")
)
.await;
\"Ok\"
}
但是我无法让 to_string 工作,我在 Rocket 的文档中找不到任何关于如何获取结构的 json 字符串表示的内容。
-
您对
Json(c).to_string()感到困惑,您可能正在寻找rocket::serde::json::to_string(&c) -
是的,这就是我要找的那个,我不知道为什么当我同时导入 Json 和 json 时编译器会引发错误。我将该行更新为
.payload(&json::to_string(&c).unwrap())但现在我收到另一个错误:`Json<Credential>` @user2722968 没有实现特征Serialize
标签: json rust apache-kafka serde rust-rocket