如何使骆驼路由交换检索原始数据类型



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 );

最新更新