【问题标题】:Apache Camel modifies JSON when CONTENT_TYPE is application/json当 CONTENT_TYPE 为 application/json 时,Apache Camel 修改 JSON
【发布时间】:2019-12-02 17:21:51
【问题描述】:

我正在使用 Apache Camel 构建我的 REST-API,并使用“bindingMode(RestBindingMode.json)”作为我的 restConfiguration 和码头。在我的一个处理器中,我将“out”对象的“body”设置为一个实际上是 JSON 对象的字符串。当我将 Exchange.CONTENT_TYPE 设置为“text/plain”时,响应按预期出现,并且可以直接解析为 JSON 对象。

{"mockBasicData":"123"}

但是当我将 Exchange.CONTENT_TYPE 设置为“application/json”或者我根本没有设置它时,Camel 会操纵主体并将其转义,就像它不是 JSON 对象一样。

{\"mockBasicData\":\"123\"}

有没有办法避免在 Camel 中自动转义,因为我需要 CONTENT_TYPE 为“application/json”?

【问题讨论】:

  • 你试过使用 RestBindingMode.Auto 吗?
  • 是的,没用。

标签: java json apache-camel content-type


【解决方案1】:

RestBinding 的典型用途是指定编组从 POJO 到 json 或 xml。如果我正确理解您所说的话,您正在将 json 字符串主体转换为 json,对吗? 如果是这样,您是否尝试使用 JSON Object it-self 设置 out 对象的主体?

还请注意以下几点:

从 Camel 2.16.3 开始,从 POJO 到 JSon/JAXB 的绑定只会 如果内容类型标头包含 json 或 xml,则会发生这种情况。这允许 如果消息正文不应该指定自定义内容类型 尝试使用绑定进行编组。这很有用,如果,对于 例如,消息正文是自定义二进制有效负载。

【讨论】:

  • 是的,添加 JSON 对象本身仍然会导致 Camel 添加转义字符。
【解决方案2】:

将“bindingMode(RestBindingMode.off)”直接添加到路由(而不是 rest()!)为我解决了这个问题。

【讨论】:

    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多