当前位置: 首页 > 知识库问答 >
问题:

Apache camel带有Spring DSL封送器到json问题

闻人锦
2023-03-14

我有以下配置

<dataFormats>
        <json id="orderModel" library="Jackson" objectMapper="com.camel.CustomObjectMapper"
              unmarshalTypeName="com.orders.OrderModel"/>
        <json id="salesOrder" library="Jackson" objectMapper="com.camel.CustomObjectMapper"
              unmarshalTypeName="com.camel.model.salesorder.SalesOrder"/>
</dataFormats>

<route id="orderTranslateToSalesOrder">
        <from ref="orderPlaced"/>
        <unmarshal ref="orderModel" />
        <process ref="customerProcessor" />
        <process ref="salesOrderConverter"/>
        <marshal ref="salesOrder"/>
        <inOnly ref="orderCreate" />
        <process ref="history"/>
</route>

我从orderPlaced(一个rabbit队列)中读取,然后将对象解封为OrderModel,然后执行两个进程,其中第二个进程将body对象类型从OrderModel更改为SalesOrder,但当封送消息时,我得到一个错误

虽然我指定封送器使用salesOrder数据格式,但在做事情的最后,由于某种原因它使用的是orderModel数据格式,但我无法确定原因。

这就是SalesOrderConverter在最后的操作

exchange.getOut().setHeaders(exchange.getIn().getHeaders());
exchange.getOut().setBody(salesOrder, SalesOrder.class);

共有1个答案

龚迪
2023-03-14

无法识别的字段“SalesOrder”,因为您还没有在POJO中映射此字段。如果您不想映射,那么您也应该在pojo中包含注释@jsonIgnore

 类似资料:
  • 我有一个遗留web服务项目,它接收两个不同的XML模式,但属性名称相同(包括根元素)。我正在使用Spring、OXM和JAXB2进行编组/解组。 我已经用另一个问题解决了前面的一个问题,所以我使用SAX解析器来确定使用哪一个解组器。解析XML时,我检查一个值,然后就可以使用反编组器或其他反编组器。 我如何将其转换为更Spring(OXM)的方法呢?

  • 问题内容: 我正在Go中构建一个JSON API,我想将错误响应作为json返回。 响应示例: 我以为我可以创建一个实现错误接口的包装器结构,然后使用Go的json封送处理程序作为获取错误的json表示形式的一种干净方法: 这只会将JsonErr 封送为,是否可以使用默认的Go json封送处理程序对该结构进行编码,还是需要为JsonErr结构编写快速的自定义MarshalJson? 问题答案:

  • 我正在尝试封送和取消封送映射到值对/从值对。我可以成功封送该对象,但是,我不能从XML中取消封送它。反封送结果是映射中存在的关键字,但其值为空。 下面是我要封送和取消封送的模型: 而且我还发现了一个关于这个问题的类似问题“JAXB:如何将映射编入 value ”,然而,它并没有解决解编组问题?

  • 我可以找到许多例子,说明如何让akka-http服务器轻松封送由case类表示的响应实体,只需混合使用SprayJSONSupport/DefaultJSONProtocol,在隐式作用域中提供jsonFormat并在路由DSL中使用complete指令。整齐!

  • null 杰克逊在默认情况下有能力做到这一点。

  • 我从遵循以下模式的 API 接收动态 JSON: 例如,原始数据将是: 考虑到我们想避免解组到这样的结构: 我们将不得不像这样将数据投回: 解组的更好方法是什么?