验证数据映射器中的字段(CSV 到 JSON)。

validate fields in datamapper (CSV to JSON).

正在使用 mule datamapper 从 CSV 转换为 JSON。我想检查必填字段是否为空。如果为空,则记录该字段并将其丢弃以供进一步处理。

我知道在脚本选项中我们有 if(input.data.length >0).' 但是如果失败了如何丢弃整行呢??

您可以在 mule datamapper 中执行此操作,只需将整个转换封装在 if 语句左括号和右括号中即可。像这样:

if ( input.Quantity > 0 ) {
    output.id = input.id;
    output.Customer = input.Customer;
    output.Quantity = input.Quantity;
    output.Price = input.Price;
}

然而,另一种可能更好的方法是让数据映射器将每一行转换为 JSON,然后拆分和过滤为流程中的单独步骤。

<flow name="filterindatamapperFlow2" doc:name="filterindatamapperFlow2">
    <file:inbound-endpoint path="/tmp/inbox" doc:name="Inbound file"/>
    <data-mapper:transform config-ref="CSV_To_UnfilteredJSON" doc:name="CSV To Unfiltered JSON"/>
    <request-reply>
        <vm:outbound-endpoint path="splittandprocess" exchange-pattern="one-way"/>
        <vm:inbound-endpoint path="result"/>
    </request-reply>
    <json:object-to-json-transformer doc:name="Object to JSON"/>
    <file:outbound-endpoint path="/tmp/outbox" doc:name="Outbound file"/>
</flow>

<flow name="splittandprocess">
    <vm:inbound-endpoint path="splittandprocess" exchange-pattern="one-way"/>
    <json:json-to-object-transformer returnClass="java.util.List" doc:name="JSON to Object"/>
    <splitter expression="#[payload]" doc:name="Splitter"/>
    <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
    <message-filter  doc:name="Filter Out Orders With No Quantity" onUnaccepted="handleFilteredMessages">
        <expression-filter expression="#[payload['Quantity'] > 0]" />
    </message-filter>
    <collection-aggregator failOnTimeout="false" timeout="1000"/>
    <vm:outbound-endpoint path="result" exchange-pattern="one-way"/>
</flow>
<flow name="handleFilteredMessages">
    <logger message="Payload filtered #[payload]" level="ERROR" doc:name="Logger"/>
</flow>