可验证模型的自定义验证错误消息

Custom validation error message for Validatable model

是否可以为内置 Validatable 协议提供自定义验证错误消息?
我有这个验证:

static func validations() throws -> Validations<NewsletterListItem> {
    var validations = Validations(NewsletterListItem.self)
    validations.add(\.email, at: ["email"], .email)
    return validations
}

它会产生这条消息:

{
  "error": true,
  "reason": "duplicate key value violates unique constraint \"uq:newsletter_list.email\""
}

...我想改进。

事实证明,Validatable 仅添加了约束,但并未自行验证它们。因此,不是向 Validatable 提供错误消息,而是需要捕获错误,检查错误是什么,然后 return/throw 所需的响应消息。这样做的好地方是对模型的 .save() 调用:

以下示例位于 POST /subscribe-to-newsletter 的路由处理程序中:

return try item.save(on: req).catchMap { error in
    if error.localizedDescription.contains("uq:newsletter_list.email") {
        throw Abort(.ok, reason: "You're already subscribed to newsletter")
    }
    throw Abort(.badRequest, reason: "error: \(error.localizedDescription)")
}