如何使用Rocket (Rust)获得此响应JSON结构



我用Rocket编写了一个简单的web服务,每当data作为200响应出现时,它包含Strings的向量。当出现错误时,我希望有自定义错误。这些响应的结构应该是https://stackoverflow.com/a/23708903/4402306,具体来说是:

成功响应:

{
"data": {
"topics": ["topic1", "topic2", ...]
}
}

和错误:

{
"error": {
"status_code": 404,
"message": "not found (or any other custom error)"
}
}

对于错误,我在火箭中使用catcher与实现我自己的错误结构(如枚举(带有火箭派生))的混淆:

#[derive(Serialize, Deserialize, Responder)]
#[response(content_type = "json")]
pub enum APIError{
CustomError1(String, #[response(ignore)] String),
CustomError2(String, #[response(ignore)] String),
...
}

那么我应该用什么来实现我的目标呢?

我也不确定如何表示成功的情况下(因为与rocket,第一个字段应该实现Responder特性,但我有一个Vec<String>那里)

#[derive(Serialize, Deserialize, Responder)]
#[response(content_type = "json")]
pub struct Data {
topics: Vec<String>,
}

最后,我想我还需要将DataAPIError组合在一个Response结构中-但是我不清楚如何控制何时返回什么。

感谢您的帮助。

您可以注册一个返回自定义消息的自定义Catcher。看到这个。