RAML中如何验证查询参数sfIds为数值数组?
RAML数组查询参数数值验证方案
问题原因
你通过自定义NumericArray类型实现验证的思路是可行的,但Mule默认会把查询参数中的数组整体解析为JSONArray对象,而非逐个解析元素,导致校验时误判元素类型为JSONArray而非数值,从而报错。
正确RAML配置
只需在查询参数中添加collectionFormat配置,让Mule正确识别数组元素的传递格式,就能实现预期的数值验证:
#%RAML 1.0 title: My Test API version: v1 types: NumericArray: type: array items: number /ids: get: queryParameters: sfIds?: type: NumericArray example: [111,222] collectionFormat: multi # 核心配置,指定数组参数的传递格式
配置说明
collectionFormat: multi:指定参数以sfIds=111&sfIds=222的多键值对格式传递,Mule会逐个解析每个sfIds值为数值类型,完成校验。- 若需要支持逗号分隔的格式(如
sfIds=111,222),可将collectionFormat改为csv,同样能让Mule拆分元素并校验数值类型。
验证结果
配置完成后:
- 合法请求:
/ids?sfIds=111&sfIds=222或/ids?sfIds=111,222会通过校验 - 非法请求:
/ids?sfIds=ABC&sfIds=111或/ids?sfIds=ABC,111会触发类型校验错误,符合预期
内容的提问来源于stack exchange,提问作者Triumph Spitfire
相关产品推荐
相关产品推荐

