如何自定义无效输入的错误消息?
How to customise error message for invalid input?
如何自定义无效输入的错误消息?
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"username": {
"type": "string",
"pattern": "^[A-Za-z0-9-_.]+$",
"minLength": 3
},
"password": {
"type": "string",
"minLength": 8,
"pattern": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d\W]$"
}
},
"required": [
"username",
"password"
],
"errors": [
{
"property": "username",
"message": "min 3 characters, do not use spaces or special characters"
}
]
}
例如,如果输入的用户名未达到要求的最小长度或不满足正则表达式模式,则显示 one 自定义消息 min 3 characters, do not use spaces or special characters
不支持自定义错误消息。但是,正在讨论在 JSON Schema 的下一版本中添加这样的功能。
更新2021-01-26
JSON Schema 从未以这种方式支持自定义错误消息。这样做的主要问题是适当的错误消息取决于受众和上下文,因此以这种方式定义一条消息是有限制的。例如,开发人员需要与最终用户不同的反馈。
相反,JSON 模式对验证返回的结果进行了标准化。这使您可以处理结果以生成适合您的受众的输出。理论上,可以开发库来为某些受众生成错误消息。这些将与您的验证器库分离,使您将来可以更轻松地切换到另一个实现。
但是,即使是最好的错误消息生成库也无法解决原始问题中出现的特定情况。库不能采用正则表达式并生成有意义的消息。好消息是,JSON Schema 提供了一种称为词汇表的扩展机制,您可以使用它来创建自定义关键字,以使用输出处理器生成更好的错误消息所需的信息来注释您的模式。例如,原始问题中的 errors
关键字将出现在标准输出结果中,并且输出处理器可以将其用作生成面向用户的友好错误消息的一种方式。
遗憾的是,目前还没有人构建过这些标准输出处理器,因此您无法从现成的产品中挑选一款。做起来应该不难,但你必须自己写。 https://github.com/atlassian/better-ajv-errors 是这些输出处理器工具之一,但它使用 ajv 的专有输出格式而不是标准格式。
标准化输出格式和 JSON 模式词汇表都是 2019-09 草案中的新内容,到目前为止尚未得到广泛采用。随着时间的推移,我们希望看到更多的工具来简化这些类型的自定义。
如何自定义无效输入的错误消息?
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"username": {
"type": "string",
"pattern": "^[A-Za-z0-9-_.]+$",
"minLength": 3
},
"password": {
"type": "string",
"minLength": 8,
"pattern": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d\W]$"
}
},
"required": [
"username",
"password"
],
"errors": [
{
"property": "username",
"message": "min 3 characters, do not use spaces or special characters"
}
]
}
例如,如果输入的用户名未达到要求的最小长度或不满足正则表达式模式,则显示 one 自定义消息 min 3 characters, do not use spaces or special characters
不支持自定义错误消息。但是,正在讨论在 JSON Schema 的下一版本中添加这样的功能。
更新2021-01-26
JSON Schema 从未以这种方式支持自定义错误消息。这样做的主要问题是适当的错误消息取决于受众和上下文,因此以这种方式定义一条消息是有限制的。例如,开发人员需要与最终用户不同的反馈。
相反,JSON 模式对验证返回的结果进行了标准化。这使您可以处理结果以生成适合您的受众的输出。理论上,可以开发库来为某些受众生成错误消息。这些将与您的验证器库分离,使您将来可以更轻松地切换到另一个实现。
但是,即使是最好的错误消息生成库也无法解决原始问题中出现的特定情况。库不能采用正则表达式并生成有意义的消息。好消息是,JSON Schema 提供了一种称为词汇表的扩展机制,您可以使用它来创建自定义关键字,以使用输出处理器生成更好的错误消息所需的信息来注释您的模式。例如,原始问题中的 errors
关键字将出现在标准输出结果中,并且输出处理器可以将其用作生成面向用户的友好错误消息的一种方式。
遗憾的是,目前还没有人构建过这些标准输出处理器,因此您无法从现成的产品中挑选一款。做起来应该不难,但你必须自己写。 https://github.com/atlassian/better-ajv-errors 是这些输出处理器工具之一,但它使用 ajv 的专有输出格式而不是标准格式。
标准化输出格式和 JSON 模式词汇表都是 2019-09 草案中的新内容,到目前为止尚未得到广泛采用。随着时间的推移,我们希望看到更多的工具来简化这些类型的自定义。