在 Mule 4 中验证多个输入查询参数
validating multiple input query params in Mule 4
我正在使用 Mule 4.4 社区版
我有一个带有 4 个查询参数的 GET 端点:
empId ( mandatory )
collegeId ( mandatory )
subject ( either subject or score is required )
score ( either subject or score is required )
进行这些验证的最佳方式是什么?
这是我尝试过但对结果不满意的方法...
通过 Open API 规范(必需属性)
验证 'empId' 和 'collegeId'
parameters:
- name: empId
in: query
description: The web user account
required: true
schema:
type: string
- name: collegeId
in: query
description: The web organisation
required: true
但是,如果我只是针对这些传递一个空字符串,则不会触发任何验证....
尝试使用模式,例如 :
pattern: "^[A-Za-z0-9]+$"
虽然这确实可以防止空/空字符串,但错误消息并不令人满意:
Invalid value ' ' for uri parameter empId.
string [ ] does not match pattern ^[A-Za-z0-9]+$
问题:我可以覆盖 Open API 规范中的错误消息以使其看起来更轻松吗?
现在是 'subject' 和 'score' ,其中至少一个应该是非空或空的
除了这个 link here 没有找到任何东西
我们如何强制两者中至少有一个具有非空/空值(通过 Open api spec 3.0.1)
所以我想我会手工验证,使用验证器,但它们看起来很笨重
ex - 对于像 'not null or empty' 这样的简单检查必须使用两个验证器.....
<flow name="get:employee-search" >
<validation:any doc:name="Any" >
<validation:is-not-null doc:name="Is subject not null" value="#[attributes.queryParams['subject']]" message="${validation.subject}" />
<validation:is-not-null doc:name="Is score not null" value="#[attributes.queryParams['score']]" message="${validation.score}" />
<validation:is-not-blank-string doc:name="Is subject not blank string" value="#[attributes.queryParams['subject']]" message="${validation.subject}"/>
<validation:is-not-blank-string doc:name="Is score not blank string" value="#[attributes.queryParams['score']]" message="${validation.score}"/>
</validation:any>
如果两个字段都没有发送,那么两个验证器的错误消息都会显示
问题:
我应该写一个 groovy 脚本来执行这些简单的验证吗
只是想知道这是最好的方法还是更好的方法?
我认为您不能仅通过 Open API Specs 自定义错误消息,但是当您在应用程序中生成流程时,它也会为 APIKIT 验证创建错误处理程序。您可以在 错误请求 错误处理程序中编写转换消息,以通过检查错误消息来修改响应。
现在对于验证部分,如果您正在检查 validation:is-not-blank-string
,则不需要检查 validation:is-not-null
,因为后者还会检查字符串是否为 Null。此外,您还必须合并剩余的两个验证器,否则即使分数通过,如果主题为空,它也会失败。要处理此问题,您可以使用 validation:is-false or validation:all Scope.
使用 validation:all
时,您会将两个 validation:is-not-blank-string
包装在一个范围内,并且仅当两个验证都失败时才会失败。
使用 validation:is-false
您可以在模块中编写自定义编织表达式,即 returns true
如果两个字段均为空白。这将使此验证失败(因为它不是假的)并且您可以自定义错误消息。像这样
<validation:is-false doc:name="Is false"
doc:id="c62a27a4-d030-4f72-9610-eacbb74dd593"
expression="#[isBlank(attributes.queryParams.score) and isBlank(attributes.queryParams.subject)]"
message="Both Score and Subject can not be empty" />
我正在使用 Mule 4.4 社区版 我有一个带有 4 个查询参数的 GET 端点:
empId ( mandatory )
collegeId ( mandatory )
subject ( either subject or score is required )
score ( either subject or score is required )
进行这些验证的最佳方式是什么?
这是我尝试过但对结果不满意的方法... 通过 Open API 规范(必需属性)
验证 'empId' 和 'collegeId'parameters:
- name: empId
in: query
description: The web user account
required: true
schema:
type: string
- name: collegeId
in: query
description: The web organisation
required: true
但是,如果我只是针对这些传递一个空字符串,则不会触发任何验证.... 尝试使用模式,例如 :
pattern: "^[A-Za-z0-9]+$"
虽然这确实可以防止空/空字符串,但错误消息并不令人满意:
Invalid value ' ' for uri parameter empId. string [ ] does not match pattern ^[A-Za-z0-9]+$
问题:我可以覆盖 Open API 规范中的错误消息以使其看起来更轻松吗?
现在是 'subject' 和 'score' ,其中至少一个应该是非空或空的 除了这个 link here 没有找到任何东西 我们如何强制两者中至少有一个具有非空/空值(通过 Open api spec 3.0.1)
所以我想我会手工验证,使用验证器,但它们看起来很笨重 ex - 对于像 'not null or empty' 这样的简单检查必须使用两个验证器.....
<flow name="get:employee-search" >
<validation:any doc:name="Any" >
<validation:is-not-null doc:name="Is subject not null" value="#[attributes.queryParams['subject']]" message="${validation.subject}" />
<validation:is-not-null doc:name="Is score not null" value="#[attributes.queryParams['score']]" message="${validation.score}" />
<validation:is-not-blank-string doc:name="Is subject not blank string" value="#[attributes.queryParams['subject']]" message="${validation.subject}"/>
<validation:is-not-blank-string doc:name="Is score not blank string" value="#[attributes.queryParams['score']]" message="${validation.score}"/>
</validation:any>
如果两个字段都没有发送,那么两个验证器的错误消息都会显示
问题: 我应该写一个 groovy 脚本来执行这些简单的验证吗 只是想知道这是最好的方法还是更好的方法?
我认为您不能仅通过 Open API Specs 自定义错误消息,但是当您在应用程序中生成流程时,它也会为 APIKIT 验证创建错误处理程序。您可以在 错误请求 错误处理程序中编写转换消息,以通过检查错误消息来修改响应。
现在对于验证部分,如果您正在检查 validation:is-not-blank-string
,则不需要检查 validation:is-not-null
,因为后者还会检查字符串是否为 Null。此外,您还必须合并剩余的两个验证器,否则即使分数通过,如果主题为空,它也会失败。要处理此问题,您可以使用 validation:is-false or validation:all Scope.
使用 validation:all
时,您会将两个 validation:is-not-blank-string
包装在一个范围内,并且仅当两个验证都失败时才会失败。
使用 validation:is-false
您可以在模块中编写自定义编织表达式,即 returns true
如果两个字段均为空白。这将使此验证失败(因为它不是假的)并且您可以自定义错误消息。像这样
<validation:is-false doc:name="Is false"
doc:id="c62a27a4-d030-4f72-9610-eacbb74dd593"
expression="#[isBlank(attributes.queryParams.score) and isBlank(attributes.queryParams.subject)]"
message="Both Score and Subject can not be empty" />