Camel:如何将 Integer header 的值增加一定数量

Camel: How to increment the value of an Integer header by a set amount

到目前为止,这是我的代码,我想将 offset header 的值增加 50:

.process(new Processor() {
     @Override
     public void process(Exchange ex){  
         ex.getIn().setHeader("offset", Integer.parseInt(ex.getIn().getHeader("offset").toString())); }
  })

有人知道简单的解决方案吗?

我为此使用了这样的处理器:

public class IncrementIntProcessor implements Processor {
    private String headerName;
    private int delta = 1;

    public IncrementIntProcessor(String headerName){
        this.headerName = headerName;
    }

    public IncrementIntProcessor(String headerName, int delta){
        this.headerName = headerName;
        this.delta = delta;
    }

    @Override
    public void process(Exchange exchange) throws Exception {
        int num = (exchange.getIn().getHeader(headerName)==null ? 0 : exchange.getIn().getHeader(headerName, Integer.class));
        exchange.getIn().setHeader(headerName, (num+delta));
    }
}

示例:

            ....
            .process(new IncrementIntProcessor("intHeader", 50))
            .log(LoggingLevel.INFO, "${header.intHeader}")
            ....

看到其他简单的解决方案很有趣。

我没有看到您在代码中将整数 header 增加 50 的位置 [注意:问题后来被编辑了]。您似乎只是将 String 解析为整数。您可以利用 type conversions:

来简化它
Message in = ex.getIn();
in.setHeader("offset", in.getHeader("offset", Integer.class));

如果您想将偏移量 header 增加 50,您可以在 路线 的帮助下 OGNL (不需要求助于处理器,就像建议的其他答案一样),然后首先将 header 转换为 Integer:

from("direct:hello")
    .setHeader("offset", header("offset").convertTo(Integer.class))
    .setHeader("offset").ognl("request.headers.offset + 50");

但是,对于更复杂的用例,通常建议您选择更具表现力和更强大的语言,例如 SpEL、Groovy、OGNL 和 others

如果您使用 Spring,您可能已经在使用 SpEL。

我使用 SpEL 重写了表达式:

from("direct:hello")
  .setHeader("offset").spel("#{request.headers['offset'] != null ? request.headers['offset'] + 1 : 1}")