如果我有一个貘端点,有
.in(query[Option[String]])("foo")
,并且请求有 ?foobar=baz
,是否可以向其添加验证逻辑,这将拒绝请求,而不是默默地忽略未知参数并将我 foo=None
作为输入?
您可以实现如下所示的内容:
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)
我想您可能可以迭代使其更适合您的使用。