1

我正在尝试采用从 Javalin 3 到 Javalin 4 的现有参数验证代码。它使用 Javalin 的Validator类。这是我得到的代码(重写):

  val messageId = ctx.pathParamAsClass<String>("messageId")
    .check(check = { it.trim().matches(Uuid.REGEX) }, errorMessage = "message id must be a UUID")
    .get()
    .trim()

我收到了check()调用的编译错误:

e: 
/home/ivan/.../SourceFile.kt: (53, 6): None of the following functions can be called with the arguments 
supplied: 
public final fun check(check: Check<String> /* = (String) -> Boolean */, error: ValidationError<String>): 
Validator<String> defined in io.javalin.core.validation.Validator
public final fun check(check: Check<String> /* = (String) -> Boolean */, error: String): Validator<String> defined in 
io.javalin.core.validation.Validator

我不明白为什么会出现错误。我想我应该匹配第二个重载的check(). 如何正确书写?

注意:我已阅读Javalin 3 到 4 迁移指南,其中给出了如下示例:

ctx.queryParamAsClass<Int>("age")
    .check({ it >= 18 }, ValidationError("AGE_TOO_LOW", args = mapOf("minAge" to 18)))
    .get()

我似乎遵循,除了我将错误消息作为字符串给出,但有匹配的重载。那么这里有什么问题呢?

4

1 回答 1

0

check()原因是调用的第二个参数error不是errorMessage,即正确的代码是这样的:

...
  .check(check = { it.trim().matches(Uuid.REGEX) }, error = "...")
...
于 2021-09-18T16:39:38.670 回答