如何为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) // 正常响应示例
逻辑说明
queryParams用于捕获请求中所有查询参数的完整集合;validate方法通过自定义逻辑检查参数合法性,不满足时触发错误响应;- 当请求携带
foobar这类未知参数时,验证失败,端点直接返回400 Bad Request和自定义错误信息,不会进入后续业务处理; - 若需要允许多个已知参数,只需修改验证逻辑中的允许列表,比如
params.keys.forall(key => Set("foo", "bar").contains(key))。
内容的提问来源于stack exchange,提问作者Dima
相关产品推荐
相关产品推荐

