骆驼用 header 表达式将 body 设置为 object
Camel set body to object with header expression
是否可以将响应body设置为object并传入骆驼header属性。我可以在处理器中实现这一点,但我宁愿按照路线进行。
.setBody(constant(
new Foo()
.withOne("HelloWorld")
.withTwo(simple("Header property is ${header.uniqueProperty}").toString())
))
使用上面的代码,我得到的响应是:
<foo>
<one>HelloWorld</one>
<two>Header property is ${header.uniqueProperty}</two>
</foo>
这是我的 POJO
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
private String one;
private String two;
public String getOne() {
return one;
}
public void setOne(final String one) {
this.one = one;
}
public String getTwo() {
return two;
}
public void setTwo(final String two) {
this.two = two;
}
public Foo withOne(final String one) {
setOne(one);
return this;
}
public Foo withTwo(final String two) {
setTwo(two);
return this;
}
}
constant()
可能对您不起作用,因为您可能希望对通过的每个交换进行动态评估。由于您需要将主体设置为新实例化的对象,因此您需要一种能够做到这一点的机制。你提到你想避免使用处理器,但我想指出这在路由中是多么简单:
.setBody(exchange -> new Foo()
.withOne("HelloWorld")
.withTwo(simple("Header property is " + exchange.getIn().getHeader("uniqueProperty")))
)
编辑:实际上这不是处理器。我们只是将 lambda (Function
) 传递给 setBody()
.
如果您处于 Spring 环境中,您可以使用 spring 表达式语言:
.setBody().spel("#{new Foo()" +
".withOne('HelloWorld')" +
".withTwo(simple('Header property is ' + request.headers.uniqueProperty))}");
是否可以将响应body设置为object并传入骆驼header属性。我可以在处理器中实现这一点,但我宁愿按照路线进行。
.setBody(constant(
new Foo()
.withOne("HelloWorld")
.withTwo(simple("Header property is ${header.uniqueProperty}").toString())
))
使用上面的代码,我得到的响应是:
<foo>
<one>HelloWorld</one>
<two>Header property is ${header.uniqueProperty}</two>
</foo>
这是我的 POJO
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
private String one;
private String two;
public String getOne() {
return one;
}
public void setOne(final String one) {
this.one = one;
}
public String getTwo() {
return two;
}
public void setTwo(final String two) {
this.two = two;
}
public Foo withOne(final String one) {
setOne(one);
return this;
}
public Foo withTwo(final String two) {
setTwo(two);
return this;
}
}
constant()
可能对您不起作用,因为您可能希望对通过的每个交换进行动态评估。由于您需要将主体设置为新实例化的对象,因此您需要一种能够做到这一点的机制。你提到你想避免使用处理器,但我想指出这在路由中是多么简单:
.setBody(exchange -> new Foo()
.withOne("HelloWorld")
.withTwo(simple("Header property is " + exchange.getIn().getHeader("uniqueProperty")))
)
编辑:实际上这不是处理器。我们只是将 lambda (Function
) 传递给 setBody()
.
如果您处于 Spring 环境中,您可以使用 spring 表达式语言:
.setBody().spel("#{new Foo()" +
".withOne('HelloWorld')" +
".withTwo(simple('Header property is ' + request.headers.uniqueProperty))}");