Tapir 验证拒绝未知查询参数

问题描述 投票:0回答:1

如果我有一个貘端点,有

.in(query[Option[String]])("foo")
,并且请求有
?foobar=baz
,是否可以向其添加验证逻辑,这将拒绝请求,而不是默默地忽略未知参数并将我
foo=None
作为输入?

scala tapir
1个回答
0
投票

您可以实现如下所示的内容:

endpoint
  .get
  // Define input query string as usual
  .in(query[Option[String]]("foo"))
  // Add an extra input that reads all query params
  .in(
    queryParams
      // And validate that they contain only the ones you want
      .validate(
        Validator.Custom { params => 
          ValidationResult.validWhen(params.toMap.keySet.forall(p => p == "foo"))
        }
      )
  )

如果您使用

foobar
查询参数调用端点,您将获得带有正文的 HTTP 400 响应:

查询参数的值无效(期望值通过验证,但得到:foobar=baz)

我想您可能可以迭代使其更适合您的使用。

© www.soinside.com 2019 - 2024. All rights reserved.