如何进行camel路由交换来检索原始数据类型?

ego6inou  于 2021-07-16  发布在  Java
关注(0)|答案(3)|浏览(282)

我正在执行驼峰路由,它从 FluentProducerTemplate 使用 withBody(parameter) 然后在我想执行的过程中 carService(CarReg carReg) 方法,我要将从生产者发送的参数传递到该方法中。
路由正在工作,当我用不需要参数的执行方法测试它,然后调用方法并返回请求的数据。此外,im sending的主体/参数正确地传递到route exchange中,因为在调试模式下,我可以看到exchange保存了我传递的正确数据。
问题是,当我想在一个exchange中调用一个方法,向其中传递应该由exchange检索的参数时,这个代码被标记为一个错误 getCarDetails(exchange.getIn().getBody)) 说我只是路过 Object 不需要 CarReg 对象类型。如何确保exchange检索到的参数是原始类型而不是对象类型?

@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));
       });
}
4dbbbstv

4dbbbstv1#

请试试这个,我希望这个能起作用。

@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))));
    });
}
sgtfey8w

sgtfey8w2#

message.getbody()有一个以类作为参数的重载。所以:

exchange.getOut().setBody(carService.getCarDetails(exchange.getIn().getBody(CarReg.class)));
omvjsjqw

omvjsjqw3#

你也可以使用jackson库输入case

@Autowired
ObjectMapper objectMapper;

String body = exchange.getIn().getBody();

CarReg carReg = objectMapper.convertValue( body , CarReg.class );

相关问题