如何使用‘#number’规则验证Schema?解决类型不匹配问题
关于使用
#number规则进行Schema验证的问题 问题详情
- 根路径
$校验失败:名称为'httpCode'的字段匹配失败(MAP:MAP) - 路径
$.httpCode校验失败:数据类型不匹配(STRING:NUMBER) - 预期校验规则:
#number - 实际响应值:206
Schema定义
def SchemaAccountProducts = """ { "httpCode": "#number", "httpMessage": "#string", "timestamp": "#string", "moreInformation": "#string", "userFriendlyError": "#string", "response": { "cardList": "#(SchemaCardList)", "accountList": "#(SchemaAccountList)", "creditList": "#(SchemaCreditList)" } } """
响应内容
{"httpCode":206,"httpMessage":"PARTIAL_CONTENT"}
解决方案
问题出在Schema中httpCode的规则写法错误:你把#number用双引号包裹了,这会让校验器将其识别为字符串类型校验规则,但实际响应里的httpCode是数字类型的206,因此触发了类型不匹配的错误。
修正方法很简单:去掉#number周围的双引号,让规则直接指定字段的数字类型校验要求。修正后的httpCode字段定义如下:
"httpCode": #number
完整修正后的Schema:
def SchemaAccountProducts = """ { "httpCode": #number, "httpMessage": "#string", "timestamp": "#string", "moreInformation": "#string", "userFriendlyError": "#string", "response": { "cardList": "#(SchemaCardList)", "accountList": "#(SchemaAccountList)", "creditList": "#(SchemaCreditList)" } } """
这样校验器就能正确识别httpCode字段需要是数字类型,与响应中的206匹配,通过校验。
内容的提问来源于stack exchange,提问作者theiniel
相关产品推荐
相关产品推荐

