提取要在我的路线中处理的条目的正确方法是什么

这是我的第一个问题,因此,如果我的问题缺少一些核心信息,请耐心等待。我将尝试尽快添加所需的信息。 我正在建立一个骆驼路线,该路线从我的数据库中检索一个URL并将该URL发送给搜寻器,该爬行器收集一些产品数据。然后,我从搜寻器收到的数据将保存回数据库中的另一个集合中。 当我爬网另一个包含相同产品的URL时,我想将新接收的数据添加到数据库中的对象中。

我试图将新接收的数据保存在一个Property中,然后设置两个常量以在数据库中找到相应的项目。找到对象之后,我想将接收到的数据发送到处理器,在其中将新数据添加到检索到的对象中,然后将其保存回数据库。

from("direct:myRoute")
...
    .setProperty("newItem").simple("${body}")
    .setBody().constant("{ 'name': $.name}")
    .setBody().constant("{ 'brand': $.brand}")
    .to("mongodb:mongoBean?database={{db}}&collection= 
         {{col}}&operation=findOneByQuery")
...

预期结果应该是,我的数据库对象存储了旧信息并存储了新接收的信息,但是我得到的是,{ 'name': $.name}无效BasicDBObject,与品牌相同。

更新

因此,我发现,对于我想要实现的目标,不可能设置两个常量。我做了一些实验,并使其能够与硬编码示例一起使用。

from("direct:myRoute")
...
    .setProperty("newItem").simple("${body}")
    .setBody().constant("{ 'name': 'product','brand': 'manufacturer'}")
    .to("mongodb:mongoBean?database={{db}}&collection= 
         {{col}}&operation=findOneByQuery")
...

但是问题仍然存在,我想将“名称”和“品牌”设置为从正文提取的json变量。

更新2

我稍稍更改了代码,并在代码中尝试了以下示例。

from("direct:myRoute")
...
    .setProperty("newItem").simple("${body}")
    .setBody().constant("{ 'name' : '{$.name}','brand' : '{$.brand}' }")
    .to("mongodb:mongoBean?database={{db}}&collection= 
         {{col}}&operation=findOneByQuery")
...

我没有从中得到任何错误,但是它没有按预期工作。我希望$ .name和$ .brand可以替换为存储在正文中的变量,但是看来,它们可以按原样使用

  

2019-11-06 13:27:43.363信息2132 --- [XNIO-1 task-1]调试   :Exchange [ExchangePattern:InOut,BodyType:字符串,正文:{'name':   '{$ .name}','brand':'{$ .brand}'}]

changquan71 回答:提取要在我的路线中处理的条目的正确方法是什么

好的,因此我们找到了解决该问题的解决方案,该解决方案适用于我们的用例。 我们将名称和品牌设置为属性,并使用简单的方法来设置具有这些属性的正文。

from("direct:myRoute")
...
    .setProperty("newItem").simple("${body}")
    .setProperty("name").jsonpath("$.name")
    .setProperty("brand").jsonpath("$.brand")
    .setBody().simple("{'name':'${property.name}','brand':'${property.brand}'}")
    .convertBodyTo(String.class)
    .to("mongodb:mongoBean?database={{db}}&collection= 
         {{col}}&operation=findOneByQuery")
...
本文链接:https://www.f2er.com/3159139.html

大家都在问