Camel 休息豆链

vsnjm48y  于 2022-12-04  发布在  Apache
关注(0)|答案(2)|浏览(81)

我目前有一个REST路由构建器,如下所示:

rest("/v1")
  .post("/create")
    .to("bean:myAssembler?method=assemble(${in.header.content})")
    .to("bean:myService?method=create(?)");

bean myAssembler接受原始JSON并将其转换为MyObject,然后返回该对象,并将其作为其create方法的参数转发到myService。
如何使用Camel执行此操作?

fkaflof6

fkaflof61#

如果您将Bean作为参数放置到某个方法中,则它将自动绑定到特定参数(如Exchange)(请参阅完整列表Parameter binding)。
一种解决方案是按如下方式定义路由和Bean:

restConfiguration()
.component("restlet")
.bindingMode(RestBindingMode.json)
.skipBindingOnErrorCode(false)
.port(port);    

rest("/v1")
    .post("/create")
        .route()
            .to("bean:myAssembler?method=assemble")
            .to("bean:myService?method=create");

用这样的豆子

public class MyAssembler {
    public void assemble(Exchange exchange) {
      String content = exchange.getIn().getHeader("content", String.class);
      // Create MyObject here.
      MyObject object; // ...transformation here.
      exchange.getOut().setBody(object);
   }
}

且这

public class MyService {
    public void create(MyObject body) {
        // Do what ever you want with the content.
        // Here it's just log.
        LOG.info("MyObject is: " + body.toString());
     }
}

所示配置的依赖项包括

org.apache.camel/camel-core/2.15.3
org.apache.camel/camel-spring/2.15.3
org.apache.camel/camel-restlet/2.15.3
javax.servlet/javax.servlet-api/3.1.0
org.apache.camel/camel-jackson/2.15.3
org.apache.camel/camel-xmljson/2.15.3
xom/xom/1.2.5
v6ylcynt

v6ylcynt2#

实际上,如果最后一个bean返回MyObject,那么下一个bean可以接受并绑定MyObject作为第一个参数。您不需要将它放入Exchange主体或任何东西中。

相关问题