弹簧集成 - 变压器和扩展头

时间:2013-11-15 11:00:24

标签: spring spring-integration

我的情况是这样的:我需要将基于邮政编码的邮件路由到三个不同的商店。

为此,我需要查看邮件标题以查找客户的邮政编码,并执行以下计算:

    if(zip < 5000)
    {
        store = "SJ";
    }
    else if(zip >= 6000)
    {
        store = "JY";
    }
    else
    {
        store = "FY";
    }

我已经设法使用以下自定义Transformer来完成它,我用它来丰富邮件头:

public class HeaderEnricher {
    public Message<?> transform(Message<?> message) 
    {
        int zip = message.getHeaders().get("Customer Zip", Integer.class);
        String store;

        if (zip < 5000) 
        {
            store = "SJ";
        } 
        else if (zip >= 6000) 
        {
            store = "JY";
        } 
        else 
        {
            store = "FY";
        }

        Message<?> messageOut = MessageBuilder
                .withPayload(message.getPayload())
                .copyHeadersIfAbsent(message.getHeaders())
                .setHeaderIfAbsent("store", store).build();

        return messageOut;
    }
}

正如我所说,这是有效的,但我想知道如何使用标题扩充器来做同样的事情。我问,因为我希望我的积分图将其说明为一个标题增益器,因为这是我对上述变换器代码的意图。

这可能吗?

1 个答案:

答案 0 :(得分:6)

你是对的!您可以使用SpEL

在没有任何Java代码的情况下执行此操作
<int:header-enricher input-channel="inputChannel" output-channel="outputChannel">
    <int:header name="store"
                expression="headers['Customer Zip'] lt 5000 ? 'SJ' : headers['Customer Zip'] ge 6000 ? 'JY' : 'FY'"/>
</int:header-enricher>