You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust中使用tide与glommio时如何将错误返回给调用方?

解决方案

你当前定义的Animal结构体中legs字段为u8类型,本身取值范围固定为0~255,若请求传入数值超过255,JSON反序列化阶段就会直接抛出错误,无法进入自定义校验逻辑。你需要先调整字段类型为取值范围更大的数值类型(例如u16),再添加校验返回逻辑,以下是可行实现:

  1. 修改Animal结构体字段类型
#[derive(Debug, Deserialize)]
struct Animal {
    name: String,
    legs: u16, // 替换u8为u16,支持接收大于255的输入值
}
  1. 在接口处理函数中添加校验逻辑,两种返回错误的实现可选:
pub async fn order_shoes(mut req: Request<()>) -> tide::Result {
    let Animal { name, legs } = req.body_json().await?;

    // 新增参数校验
    if legs > 255 {
        // 方案A:完全自定义错误响应结构,适合需要统一返回格式的场景
        return Ok(Response::builder(400)
            .body(json!({
                "code": 40001,
                "msg": "legs参数不合法",
                "data": format!("当前传入值为{},最大值不能超过255", legs)
            }))
            .content_type(mime::JSON)
            .build()
        );

        // 方案B:使用tide内置Error返回,走默认错误处理逻辑
        // return Err(tide::Error::from_str(
        //     tide::StatusCode::BadRequest,
        //     format!("legs参数不能超过255,当前值为{}", legs)
        // ));
    }

    let res = Response::builder(203)
        .body("Hi")
        .header("custom-header", "value")
        .content_type(mime::HTML)
        .build();
    Ok(res)
}

两种方案的差异:

  • 方案A可以自由控制响应体格式、响应头、状态码,返回格式更灵活
  • 方案B代码更简洁,返回的响应体默认是纯文本错误信息

内容的提问来源于stack exchange,提问作者shiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:24:03