我很难弄清楚如何在请求正文中使用 JSON 执行 HTTP POST。下面发布了我的流程示例。我有一个轮询 POJO 的轮询器,它在轮询时生成一个 JSON。然后,我需要获取此 JSON 并在正文中使用它向外部 REST 服务执行 HTTP POST。 Apache HTTP 客户端的等效功能是将字符串实体设置为我的 JSON 消息,并将 header 内容类型设置为 application/json。我该如何在 Mule 中做到这一点?预先感谢您的帮助。
<flow name="flow1" doc:name="flow1">
<poll frequency="100000">
<logger message="starting" level="INFO" doc:name="Logger"/>
</poll>
<component class="JavaJSONGeneratorClass" doc:name="ReferenceToJavaClass"/>
<echo-component doc:name="Echo"/>
<http:outbound-endpoint exchange-pattern="request-response" host="xxx.xxx.xxx.xxx" port="8080" path="path/to/service" doc:name="HTTP"/>
<logger level="INFO" doc:name="Logger"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<echo-component doc:name="Echo"/>
</flow>
Java 类会执行如下操作:
import java.io.Serializable;
import org.mule.api.MuleEventContext;
import org.mule.api.MuleMessage;
import org.mule.api.lifecycle.Callable;
import org.mule.module.client.MuleClient;
public class JSONGenerator implements Callable, Serializable
{
@Override
public Object onCall(MuleEventContext eventContext) throws Exception
{
String json = generateSomeJson(some_parameter);
return json;
}
}
最佳答案
您可能只是忘记将 contentType 属性设置为 http 出站端点,该端点应如下所示:
<http:outbound-endpoint exchange-pattern="request-response" host="xxx.xxx.xxx.xxx" port="8080" path="path/to/service" doc:name="HTTP" contentType="application/json"/>
mule 还附带了 Json 的 OOTB 解决方案,例如 object-to-json-transformer或者 DataMapper对于 EE 版本,因此我建议尽可能使用其中之一,而不是自定义版本。
关于json - 带有 JSON 正文的 Mule ESB HTTP post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12607958/