当前位置: 首页 > news >正文

【Rust笔记】Rocket实现自定义的Responder

在Java项目中,我们通常会将响应包装一层来实现统一响应格式,在Rocket中,我们也可以通过实现Responder来返回统一的响应。

res.rs

use crate::api::err::Error;
use rocket::response::Responder;
use rocket::serde::json::json;
use rocket::serde::{Deserialize, Serialize};
use rocket::Request;#[derive(Serialize, Deserialize)]
pub struct Res<'a, T> {code: i32,msg: &'a str,data: Option<T>,
}impl<T> Res<T> {pub fn success(data: T) -> Self {Res {code: 0,msg: "",data: Some(data),}}pub fn error(msg: &str) -> Self {Res {code: 1,msg,data: None,}}pub fn from_error(error: Error) -> Self {Res {code: error.0,msg: error.1,data: None,}}
}impl<'r, 'o: 'r, T: Serialize> Responder<'r, 'o> for Res<T> {fn respond_to(self, request: &'r Request<'_>) -> rocket::response::Result<'o> {json!(&self).respond_to(request)}
}

err.rs

pub type Error<'a> = (i32, &'a str);pub const ANY: Error = (1, "system error");
pub const SOURCE_NOT_EMPTY: Error = (1001, "source is not empty");

然后就可以按具体处理结果返回统一的失败或者成功响应:

  • 成功:
    Res::success(source)
    
  • 失败:
    Res::error("失败原因")
    
  • 自定义失败code:
    Res::from_error((10001,"失败原因"))
    
    或者在err.rs中添加错误类型后:
    Res::from_error(err::SOURCE_NOT_EMPTY)
    

http://www.mrgr.cn/news/61498.html

相关文章:

  • mysql本地安装和pycharm链接数据库操作
  • 华三S6520交换机配置console和ssh
  • 6.business english--updates
  • “深入浅出”系列之FFmpeg:(1)音视频开发基础
  • Unity 的 Vector3 与 Babylon.js 的 Vector3:使用上的异同
  • Python标准库之SQLite3
  • 【数据结构与算法】力扣 23. 合并 K 个升序链表
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-8
  • 【python实操】python小程序之测试报告
  • RESCAL张量分解检测YELP数据集
  • JVM垃圾回收算法
  • C++引用类型变量
  • 深入了解 JavaScript 字符串方法:从字符获取到大小写转换
  • 如何使用非官方的根组件
  • c++习题36-奇数单增序列
  • 双指针——对撞指针与左右指针
  • Spring Boot集成Milvus和deeplearning4j实现图搜图功能
  • 提升质量:构建系统性的质量保证策略
  • java-web-day6-下-知识点小结
  • 构建生产级的 RAG 系统
  • GCC及GDB的使用
  • 自适应阻抗案例分析(上)
  • 基于SpringBoot+LayUI+Vue智能停车收费系统
  • 第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八
  • 【工具】Charles对360浏览器抓包抓包
  • Nginx 迁移到 Caddy:一次完整的反向代理配置迁移实践