Mule ESB HTTP post with JSON body



我很难弄清楚如何在请求正文中使用JSON进行HTTP POST。 下面发布了我的流程示例。 我有一个轮询器轮询 POJO,它在轮询时生成 JSON。 然后,我需要获取此JSON,并在正文中将其用于外部REST服务。 Apache HTTP 客户端等效项是为我的 JSON 消息设置一个字符串实体,并将标头内容类型设置为 application/json。 我在骡子中该怎么做?提前感谢您的帮助。

<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 解决方案,例如对象到 json 转换器或EE版本的DataMapper,因此我建议尽可能使用其中之一而不是自定义版本。

您缺少http方法,请尝试使用此方法:

<http:outbound-endpoint exchange-pattern="request-response" host="xxx.xxx.xxx.xxx" port="8080" path="path/to/service" doc:name="HTTP" method="POST"/>

最新更新