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}")
到目前为止,这是我的代码,我想将 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}")