如果请求主体中不存在该属性,是否有办法为属性介体设置默认值?

问题描述 投票:2回答:3

我正在WSO2 EI / ESB中构建一个简单的API。我将每个请求参数保存到这样的属性:

<property expression="json-eval($.client_id)" name="client_id" scope="default" type="STRING"/>

然后使用有效负载工厂构建有效负载:

<payloadFactory media-type="json">
                <format>       
                    {

                        "req_type": "1",
                        "client_id": $1

                    }
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('client_id')"/>
                </args>
</payloadFactory>

但是,如果我发送了一条空消息{}(没有client_id),则$ 1参数中没有任何内容,并且生成的有效内容将不会验证:

{
                    "req_type": "1",
                    "client_id:
}

我想知道的是,在属性介体中保存此表达式时是否有设置默认值的方法?例如:<property expression="json-eval($.client_id)" name="client_id" scope="default" type="STRING" defaultValue="0"/>或类似的东西。

我知道我可以实现过滤器来检查该字段是否存在并验证它但我发现它可能会变得有点混乱。

wso2 wso2esb wso2ei synapse
3个回答
2
投票

不,你不能使用payloadFactory。您必须选择不同的解决方案:

  • 用XSLT转换替换您的payloadFactory,这更灵活(最佳解决方案)
  • 添加过滤器以构建参数并设置默认值
  • 使用脚本调解器替换痛苦的过滤器,并能够轻松管理if / then / else语句。然后,您可以从脚本介体初始化该属性。

0
投票

我认为没有办法做到这一点。您将不得不使用过滤器。


0
投票

条件xpath?这可能会奏效。玩下面的代码。

<enrich>
    <source clone="true" type="custom" xpath="0"  />
    <target action="replace" type="custom" xpath="" property="boolean(string-length(//client_id) != 0)" />
</enrich>
© www.soinside.com 2019 - 2024. All rights reserved.