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

如何为Tapir端点添加验证,拒绝含未知查询参数的请求?

实现Tapir端点拒绝未知查询参数

可以通过添加验证逻辑实现拒绝携带未知查询参数的请求,具体实现方式如下:

  • 核心思路:捕获请求的所有查询参数,验证参数键是否仅包含允许的字段(此处为foo),不满足条件则直接返回错误响应。

代码实现示例

import sttp.tapir._
import sttp.model.QueryParams

// 定义带严格参数验证的端点
val strictQueryEndpoint = endpoint
  .in(query[Option[String]]("foo")) // 原有foo参数定义
  .in(queryParams) // 获取所有查询参数的键值对映射
  // 添加验证规则:仅允许"foo"作为查询参数键
  .validate(
    params => params.keys.forall(_ == "foo"),
    "Invalid query parameters",
    "Only the 'foo' query parameter is allowed"
  )
  .errorOut(statusCode(StatusCode.BadRequest).and(stringBody)) // 验证失败返回400错误及信息
  .out(stringBody) // 正常响应示例

逻辑说明

  1. queryParams用于捕获请求中所有查询参数的完整集合;
  2. validate方法通过自定义逻辑检查参数合法性,不满足时触发错误响应;
  3. 当请求携带foobar这类未知参数时,验证失败,端点直接返回400 Bad Request和自定义错误信息,不会进入后续业务处理;
  4. 若需要允许多个已知参数,只需修改验证逻辑中的允许列表,比如params.keys.forall(key => Set("foo", "bar").contains(key))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:56:23