您可以通过使用数据库或内联表达式提取请求值来填充响应。

使用数据库提取请求值

数据库工具从传入请求中提取 JSON 或 XML 值,以便用于填充关联响应的元素。可以将数据库工具添加到任何可用消息响应器的传入请求中。本文档其他部分对数据库作了更详细的说明。请参阅以下链接了解更多信息:

添加响应器、输出工具和验证

数据交换工具

使用数据源值、变量和提取的值参数化工具

使用内联表达式提取请求值

您可以通过 XPath 表达式来使用内联表达式提取请求值。在创建表达式时,请务必遵循以下规则:

  • 只使用单引号(')。
  • 不在表达式内部或默认值中使用花括号({})。

通过使用

${{=expression}}

语法对传入请求进行评估的表达式,可以对文本内容进行参数化。例如,为提取传入请求中名称字段的值而编写的表达式可以使用

${{=/root/name/text()}} 

其中传入请求是一个 XML 有效负载,如

<root>
   <name>my name</name>
</root>

日期-时间操作函数

您可以使用函数来操作日期-时间,方法是建立一个偏移值(正值或负值),将日期或时间向前或往后移动。'1y 2M 34d 567h 8m 9s’ 格式用于指定要偏移多少年/月/日/时/分/秒。这些偏移可以为正偏移,也可以为负偏移,可以缺少任何一个单位,单位之间的间隔也会被忽略。例如,以下每种偏移都会将日期向前推移一年、一个月和一天:

'1y1M1d'
'1y 1M 1d'
'+1y1M1d'

要将日期往回移动一年、一月和一天,请使用减号( - )前缀。例如:

'-1y1M1d' 

日期-时间函数接受一个或两个格式参数。如果输入或输出的日期-时间需要不同的格式,则使用两个参数,否则只需要一种格式。使用的是 Java 日期格式,因此可以接受以下示例的格式:

'yyyy-dd-MM'
'ddMMyyyy'
'yyyyMMdd HH:mm'
'dd-MM-yyyy HH:mm:ss'

函数示例

如何创建日期-时间函数取决于几个因素,包括要偏移的日期和时间(当前时间或您指定的时间),以及输入和输出时间是否要使用相同的日期-时间格式。

相对于当前时间的偏移

sv:date-math('offset', 'outFormat')

偏移当前日期时间,并以指定格式返回。例如:

${{=sv:date-math('-1y 2d 3h', 'yyyy-MM-dd HH:mm:ss')}}

将返回距离当前时间 1 年 2 天 3 小时的日期。

以相同格式偏移指定日期

sv:date-math('offset', 'format', 'date')

按指定格式偏移指定日期,并以相同格式返回。例如:

${{=sv:date-math('1y', 'yyyy-MM-dd', '2022-08-11')}}

将返回 '2023-08-11'

以不同格式偏移指定日期

sv:date-math('offset', 'outFormat', 'date', 'inFormat')

以指定的 inFormat 格式偏移特定日期,并以指定的 outFormat 格式返回。例如:

${{=sv:date-math('1y', 'MM/yyyy', '2022-08-11', 'yyyy-MM-dd')}}

将返回 '08/2023'

使用 XPath

参数也能够以 XPath 表达式的形式提供并解析为预期值。例如:

sv:date-math('1y', 'yyyy-MM-dd', /root/date/text())
sv:date-math(/root/offset/text(), 'MM/yyyy', /root/date/text(), 'yyyy-MM-dd')

所有函数都在“sv”命名空间中。它们可以像其他受支持的 XPath 表达式一样使用。例如:

"nextYear" : "${{=sv:date-math('1y', 'yyyy-MM-dd', /root/date/text())#2023-01-01}}"

如果函数无法求值(例如,给定的 XPath 表达式无法求值),表达式将返回指定的默认值,如果没有指定默认值,则返回 ""。例如,表达式

"${{=sv:date-math('1y', 'yyyy-MM-dd', /root/date/text())#2000-01-01}}"

返回值取决于请求有效负载中包含的日期元素。如果它包含 '2022-08-11' 日期元素,那么表达式将返回 '2023-08-11',但如果请求有效负载没有日期元素,表达式将返回 '2000-01-01'

如果函数因错误(如偏移格式无效)而无法求值,将返回错误信息。

从头部或 URL 提取信息的函数

支持使用几个函数从请求中提取不属于有效负载的信息,尤其是从头部或 URL 中提取信息。

函数示例 

可以提取整个 URL、URL 的指定路径段或 URL 参数。还可以提取头部。

提取 URL

sv:url()

返回请求目标的完整 URL。例如:

"http://localhost:9080/path1/path2/?param1=val1$param2=val2"

提取头部

sv:header('headerName')

返回该头部的值。如果有多个名称相同的头部,可以通过索引进行区分。例如:

${{=sv:header('name', 2)}}

将提供第二个出现的 "name" 头部的值。如果有多个名称相同的头部,而您没有使用索引进行区分,那么将返回第一个出现的头部的值。

提取 URL 参数

sv:url-parameter('parameterName')

返回该 URL 参数的值。如果存在多个同名参数,可以通过索引来区分。例如:

${{=sv:url-parameter('name', 2)}}

将提供第二个出现的 "name" URL 参数的值。如果有多个名称相同的参数,而您没有使用索引进行区分,那么将返回第一个出现的头部的值。

提取 URL 路径段

sv:url-path(index)

返回给定索引处的 URL 路径段。例如:

${{=sv:url-path(0)}}

返回第一个路径段。在前面的 URL 示例 "http://localhost:9080/path1/path2/?param1=val1$param2=val2" 中,这意味着将返回 "path1"。

使用 XPath

参数也能够以 XPath 表达式的形式提供并解析为预期类型。例如:

sv:header(/root/headerName/text(), /root/index/text())

所有函数都在“sv”命名空间中。它们可以像其他受支持的 Xpath 内联表达式一样使用。例如:

"nameValue" : "${{=sv:header('name')#foo}}"

如果函数无法按预期进行求值(例如,缺少指定的头部值),表达式将返回指定的默认值,如果没有指定默认值,则返回 ""。例如,对于

"${{=sv:header('header1')#defaultHeader1Value}}"

表达式,如果 header1 存在,则返回 "header1Value",如果不存在,则返回 "defaultHeader1Value"

为响应器生成内联表达式

您可以根据响应器的请求模板为消息响应器生成内联表达式,从而更快对响应有效负载进行参数化。此功能适用于使用字面量多响应序列响应输入模式的消息响应器。

存在几个先决条件:

  • 必须填写消息响应器(或单个多/序列响应器)中的请求模板。更多信息,请参阅消息响应器概要页面的“请求模板”。
  • 请求有效负载中的值应与响应有效负载中的值相匹配。
  • 已在日期时间格式首选项面板中输入适当的日期时间格式。这样就可以正确识别和解析表示日期-时间的字符串值。请参阅其他首选项设置 页面的“日期时间格式”。 

生成内联表达式:

  1. 打开消息响应器。
  2. 点击响应选项卡.如果响应器的输入模式是多响应或序列响应,请点击消息子选项卡。
  3. 右键点击文本框,选择生成内联表达式
    • 如果响应器的输入模式是多响应或序列响应,也可以右键点击左侧面板中的响应并选择生成内联表达式
  4. 保存变更。


  • No labels