【问题标题】:Error sending HTTP request. Message payload is of type: HashMap发送 HTTP 请求时出错。消息有效负载的类型:HashMap
【发布时间】:2016-05-04 12:46:50
【问题描述】:

我无法从 Anypoint Studio 中生成 POST 消息:

我想要完成的是向我们的 Kykloud api 端点发送一个 POST,其中包含 3 个键值对作为有效负载,作为 x-www-form-urlencoded 内容。

这是当前的视觉设置:

(旁注:我知道在普通视图中存储机密和登录数据是不好的做法。我稍后会尝试弄清楚如何正确执行此操作)

适当的 XML 如下所示:

<flow name="LoginFlow">
    <set-payload value="#[['ApiToken': 'xxxXXXxxxXXXxxxXXX']]" doc:name="Set ApiToken"/>
    <set-payload value="#[['Email':'serv[at]someaddress.com']]" doc:name="Set Email"/>
    <set-payload value="#[['Password':'VeryLongPenis']]" doc:name="Set Password"/>
    <http:request config-ref="KyklouConnectorns" path="/api/v2/sessions?format=json" method="POST" doc:name="Login to Kykloud" port="80" />
    <logger level="INFO" message="SessionId is #[message.payload.'SessionId']" doc:name="Logger"></logger>
</flow>

理论上,响应应该是一些带有 SessionId 对象的 JSON。

我在 POSTMAN 中实际收到的是:

Error sending HTTP request. Message payload is of type: HashMap

显然我在定义我的有效载荷时做错了,但他们的文档并不清楚如何以正确的方式做到这一点:

HTTP 请求正文 Mule 消息负载被转换为一个字节 数组并作为 HTTP 请求的正文发送。这种行为被携带 总是出局,但以下情况除外:

Mule 消息的有效负载是键和值的映射

邮件有出站附件

生成请求正文 Content-Type:application/x-form-urlencoded 每当消息 payload 是一个 Map,连接器会自动生成一个 HTTP 带有标头的请求 内容类型:application/x-www-form-urlencoded。键和值 有效载荷中的映射转换为表单参数键和 HTTP 请求正文中的值。

【问题讨论】:

  • 它表示有效负载是键和值的映射。你有一个HashMap。虽然它们相似,但它们并不完全相同。在运行代码以发送消息之前,请将您的 hashmap 转换为带有 Map&lt;String, Object&gt; map2 = myHashMap; 的映射
  • @MattCorr 我应该声明,这是我使用该产品的第一天,我不知道如何在 xml 中执行此操作。

标签: java flow anypoint-studio


【解决方案1】:

您不需要为 set payload 中的每个参数 ei(username/pwd/api token) 设置有效负载,您只会拥有您想要发布的内容 在您的情况下不需要时间>。 您需要在您的 http 请求中设置 (username/pwd/api token) 作为标头。 除了以上三个之外,您可能还需要将 Content-type 设置为 application/json 这取决于您的 api。

【讨论】:

  • 这是错误的。 Kykloud 在请求正文中要求这些 kvps。
  • 然后尝试将所有 3 个键值一起设置在一个 set-payload 中。你所做的最终会覆盖有效负载,这不好。
  • 我尝试了所有可能的组合。由于我们所有人都无法做到这一点,所以我们暂时放弃了 Mulesoft。
猜你喜欢
  • 2016-08-05
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多