我正在使用Ajv来验证我的JSON数据。我无法找到一种方法来验证空字符串作为键的值。我尝试使用模式,但它没有发出适当的消息。
这是我的架构
{
"type": "object",
"properties": {
"user_name": { "type": "string" , "minLength": 1},
"user_email": { "type": "string" , "minLength": 1},
"user_contact": { "type": "string" , "minLength": 1}
},
"required": [ "user_name", 'user_email', 'user_contact']
}
我使用minLength检查该值是否应至少包含一个字符。但它也允许空的空间。
答案 0 :(得分:5)
你可以这样做:
ajv.addKeyword('isNotEmpty', {
type: 'string',
validate: function (schema, data) {
return typeof data === 'string' && data.trim() !== ''
},
errors: false
})
在json架构中:
{
[...]
"type": "object",
"properties": {
"inputName": {
"type": "string",
"format": "url",
"isNotEmpty": true,
"errorMessage": {
"isNotEmpty": "...",
"format": "..."
}
}
}
}
答案 1 :(得分:2)
我发现另一种方法是使用"而不是"关键字" maxLength":
{
[...]
"type": "object",
"properties": {
"inputName": {
"type": "string",
"allOf": [
{"not": { "maxLength": 0 }, "errorMessage": "..."},
{"minLength": 6, "errorMessage": "..."},
{"maxLength": 100, "errorMessage": "..."},
{"..."}
]
},
},
"required": [...]
}
不幸的是,如果某人用空格填充该字段,则因空格计为字符而有效。这就是为什么我更喜欢ajv.addKeyword(' isNotEmpty',...)方法,它可以在验证之前使用trim()函数。
干杯!
答案 2 :(得分:1)
目前在AJV中没有内置选项可以这样做。
答案 3 :(得分:0)
现在可以使用ajv-keywords来实现。
它是可用于ajv验证程序的自定义模式的集合。
将架构更改为
./mvnw -pl *-common -pl *jdbc-autoconfig dependency:tree -Dincludes=org.springframework | tee
使用ajv关键字
{
"type": "object",
"properties": {
"user_name": {
"type": "string",
"allOf": [
{
"transform": [
"trim"
]
},
{
"minLength": 1
}
]
},
// other properties
}
}
transform关键字指定在验证之前要执行的转换。