Im执行Camel路由,该路由使用withBody(parameter)
从FluentProducerTemplate
接收主体/参数,然后在route我想执行carService(CarReg carReg)
方法,我想将我从生产者发送的参数传递到该方法中。
路由正在工作,当我用不需要参数的执行方法测试它时,然后调用方法和路由返回请求的数据。此外,Im发送的主体/参数被正确地传递到路由交换中,因为在调试模式下,我可以看到交换保存了我传递的正确数据。
问题是,当我想在交换中调用方法时,我想将应该由交换检索的参数传递到该方法中,则此代码被标记为错误getCarDetails(exchange.getIn().getBody))
,指出Im只传递了Object
,而不是必需的CarReg
对象类型。如何确保交易所检索到的参数是原始类型,而不是Object类型?
@EndpointInject
private FluentProducerTemplate fProducerTemplate
public CarDetails startRoute(CarReg carReg){
CarDetails carDetails = fProducerTemplate.withBody(carReg)
.to("direct:route")
.request(CarDetails .class)
}
@Override
public void configure() throw Exception
from("direct:route")
.process(exchange -> {
exchange.getIn().getBody(); //exchange correctly retrieves passed parameter
exchange.get().setBody(carService.getCarDetails(exchange.getIn().getBody));
});
}
请尝试一下,我希望它能起作用。
@Override
public void configure() throw Exception
from("direct:route")
.process(exchange -> {
exchange.getIn().getBody(); //exchange correctly retrieves passed parameter
exchange.get().setBody(carService.getCarDetails(exchange.getIn().getBody((CarReg.class))));
});
}
Message.getBody((有一个重载,它将一个类作为参数。因此:
exchange.getOut().setBody(carService.getCarDetails(exchange.getIn().getBody(CarReg.class)));
您也可以使用Jackson库键入case
@Autowired
ObjectMapper objectMapper;
String body = exchange.getIn().getBody();
CarReg carReg = objectMapper.convertValue( body , CarReg.class );