当我的身体是一个整数列表时,我尝试将其作为整数获取,我得到了我期望为空的第一个列表元素,实际上我只有在测试时为空
from("timer:foo?repeatCount=1")
.setBody(constant(Arrays.asList(1, 2)))
.process(e -> System.out.println(e.getIn().getBody(Integer.class)))
.process(e -> System.out.println(e.getIn().getBody(int.class)));
这将打印1,但是如果我将from改成直接写并进行单元测试,我将得到null,则不知道这是否是预期的行为,因为在某些情况下会导致数据丢失。
(我将骆驼靴与弹簧靴一起使用)
这是我的测试路线的样子
public class DemoRouteTest extends CamelTestSupport {
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new DemoRoute();
}
}
答案 0 :(得分:0)
当您强制转换为int
而不是int[]
时,响应始终为null
。我对代码进行了一些调整以证明这一点。尝试在您的计算机上也运行此代码段:
from("timer:foo?repeatCount=1")
.setBody(constant(Arrays.asList(1, 2)))
.process(e -> {
System.out.println("Raw body: "+e.getIn().getBody());
System.out.println("Cast to int[]:");
int[]body=e.getIn().getBody(int[].class);
for(int x:body){
System.out.println(x);
}
System.out.println("Cast to int: "+e.getIn().getBody(int.class));
});
您将看到以下结果:
Raw body: [1, 2]
Cast to int[]:
1
2
Cast to int: null
答案 1 :(得分:0)
我终于看到了此日志行Overriding type converter from: StaticMethodTypeConverter: public static java.lang.Integer org.apache.camel.converter.ObjectConverter.toInteger(java.lang.Object) to: org.apache.camel.spring.boot.SpringTypeConverter@619b0c7b
,因此,当骆驼无法转换时,它仅会在使用Spring Boot框架时使用SpringTypeConverter代替