我是Mule ESB的新手,并尝试向REST服务发送post请求。请求的主体是字符串形式,请求应该是x-www-form-urlencoded。我将有效负载设置为我的参数并将请求发送给REST服务,但我得到了一个异常:
Failed to invoke REST service "http://username:password@192.168.10.252/api/rest/session/login.json". Message payload is of type: String
我的Rest URL是:(#[restURL])${dms.host}/api/Rest/session/login.json
我的参数是(设置为有效载荷#[restBody]):username=user&password=pass
<sub-flow name="RESTrequestToDMS" doc:name="RESTrequestToDMS" processingStrategy="synchronous">
<set-variable variableName="originalMessage" value="#[payload]" doc:name="Backup original message"/>
<logger message="#[restBody]" level="INFO" doc:name="Logger"/>
<choice doc:name="Choice">
<when expression="restHTTPmethod == 'POST'">
<processor-chain>
<set-payload value="#[restBody]" doc:name="Set Payload"/>
<http:rest-service-component httpMethod="POST" serviceUrl="http://${dms.user}:${dms.pass}@#[restURL]"></http:rest-service-component>
</processor-chain>
</when>
<when expression="restHTTPmethod == 'GET'">
<processor-chain>
<http:rest-service-component httpMethod="GET" serviceUrl="http://${dms.user}:${dms.pass}@#[restURL]?#[restBody]"></http:rest-service-component>
</processor-chain>
</when>
<otherwise>
<processor-chain>
<logger message="Unknown http method type is provided! " level="ERROR" doc:name="Logger"/>
</processor-chain>
</otherwise>
</choice>
<json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
<echo-component doc:name="Echo"/>
<set-variable variableName="RESTResponse" value="#[payload]" doc:name="set RESTResponse"/>
<set-payload value="#[flowVars['originalMessage']]" doc:name="Restore Original Message"/>
</sub-flow>
谁能帮我弄清楚这件事吗?
提前多谢了。
注:根据David的回复更新。
------------更新-------------------------------
所以现在,出于测试的目的,我修改了流,如下所示:
<set-payload value="#[restBody]" doc:name="Set Payload"/>
<custom-transformer class="de.mfg.osii.http.StringToURIParametersMapTransformer" doc:name="String To URI Parameters"/>
<http:rest-service-component httpMethod="POST" serviceUrl="http://${dms.user}:${dms.pass}@#[restURL]">
<http:requiredParameter key="username" value="#[payload.get('username')]" />
<http:requiredParameter key="password" value="#[payload.get('password')]" />
</http:rest-service-component>
因此,现在的有效负载是:{username=user,password=pass},但现在当我尝试运行它时,我得到以下错误:
1. Failed to invoke REST service "http://user:pass@192.168.10.252/api/rest/session/login.json". Message payload is of type: LinkedHashMap (org.mule.transport.http.components.RestServiceException)
更新:通过添加一个值为“application/x-www-form-urlencoded”的message-property“content-type”,刚刚解决了上述问题,即异常。
不过,下面的最后一部分对我来说仍然是个谜:)
另一件事是,正如我在对David回答的注释中所述,我是否可以以自适应的方式为rest组件添加所需的参数?更清楚地说,我不想为每一个不同的请求创建不同的流。我在有效载荷中有参数映射,所以我想对它们进行迭代,并将它们放入所需的参数中。这样的事情可能发生吗?
提前多谢了!
------------更新-------------------------------
所以,我修改了我的流程并使用了David的建议。然而,现在,我得到一个HTTP405错误(方法不允许)。但我肯定我发帖到正确的地址和正确的内容类型。这是什么原因呢?有人有主意吗?
这个流中的有效负载是一个字符串(url编码的参数),比如->
SessionID=9EUB9GM7K7OC1UB81DHEF6T46Q&XML=%3CobjectList%3E%3CFolderObject%3E%3CaddToFolder%20RefType%3D%22Path%22%20ClassName%3D%22FolderObject%22%3E%3C!%5BCData%5B%2FoldDerPath%5D%5D%3E%3C%2FaddToFolder%3E%3C!%5BCData%5Baaa%5D%5D%3E%3C%2Name%3E%3C%3C
<flow name="RESTrequestToDMS" doc:name="RESTrequestToDMS" processingStrategy="synchronous">
<set-variable variableName="originalMessage" value="#[payload]" doc:name="Backup original message"/>
<choice doc:name="Choice">
<when expression="restHTTPmethod == 'POST'">
<processor-chain>
<set-payload value="#[restBody]" doc:name="Set Payload"/>
<logger message="The payload before http post is: #[message.payload]" level="INFO" doc:name="Logger"/>
<http:outbound-endpoint exchange-pattern="request-response" doc:name="HTTP" address="http://#[restURL]" user="${dms.user}" password="${dms.pass}" contentType="application/x-www-form-urlencoded">
</http:outbound-endpoint>
</processor-chain>
</when>
<when expression="restHTTPmethod == 'GET'">
<processor-chain>
<http:outbound-endpoint method="GET" exchange-pattern="request-response" doc:name="HTTP" address="http://#[restURL]?#[restBody]" user="${dms.user}" password="${dms.pass}" contentType="application/x-www-form-urlencoded">
</http:outbound-endpoint>
</processor-chain>
</when>
<otherwise>
<processor-chain>
<logger message="Unknown http method type is provided! " level="ERROR" doc:name="Logger"/>
</processor-chain>
</otherwise>
</choice>
<echo-component doc:name="Echo"/>
<choice doc:name="Choice">
<when expression="payload != null && payload != empty && payload != ''">
<processor-chain>
<json:json-to-object-transformer doc:name="JSON to Object" returnClass="java.util.Map"/>
<set-variable variableName="RESTResponse" value="#[payload]" doc:name="set RESTResponse"/>
</processor-chain>
</when>
<otherwise>
<processor-chain>
<logger message="The payload is null or empty! HTTP response code is: #[message.inboundProperties['http.status']]" level="INFO" doc:name="Logger"/>
<set-variable variableName="RESTResponse" value="#[message.inboundProperties['http.status']]" doc:name="Set HTTP Status Code"/>
</processor-chain>
</otherwise>
</choice>
<set-payload value="#[flowVars['originalMessage']]" doc:name="Restore Original Message"/>
</flow>
以下是如何传递参数以通过rest-service-component
进行URL编码:
<http:rest-service-component httpMethod="POST"
serviceUrl="http://${dms.user}:${dms.pass}@#[restURL]">
<http:requiredParameter key="username" value="user" />
<http:requiredParameter key="password" value="pass" />
</http:rest-service-component>
我有一个DropWizard项目,带有一个简单的表单提交endpoint: 我正在使用Swagger(swagger-jersey2-jaxrs 1.5.4)来记录我的API。但是,对于此endpoint,没有为表单参数生成文档。如果我更改
我是Spring的新手,正在尝试用RestTemplate执行rest请求。Java代码应该执行与下面curl命令相同的操作: 但服务器拒绝了带有的RestTemplate
我对邮递员有意见... 但是,当我尝试以 raw(json) 格式的正文发送相同的请求时,我得到了这个: 我试图通过Angular 5将数据发送到Drupal 8后端。 谢谢你!
我有一个表单,它有一个输入字段,只要求一个有效的youtube url,没有逗号分隔的youtube url。我使用以下正则表达式验证youtube url的用户输入: 但如果用户输入逗号分隔的有效youtube链接,这些正则表达式就会失败。 我想要一个正则表达式,simpy只允许在输入字段中有一个有效的youtube链接。有人能在这方面帮我吗,因为我对regex还不熟悉? 例如: https:/
响应:{“httpCode”:“400”,“httpMessage”:“请求错误”,“moreInformation”:“API请求中缺少一个或多个必需的API参数。”} 从日志中,我可以看到所有参数的传递方式如下:grant\u type=client\u credentials
因此,我试图使用wiremck向带有请求正文的URL发出后请求,然后使用我的respons.json文件返回响应。(自定义响应) 我就是这样设置的,但我似乎找不到任何关于如何设置带有请求主体的post存根(包含数据,比如说尝试创建ID),然后检索自定义响应主体(从json文件创建ID响应)的信息。我该怎么设置呢。我尝试通过json文件请求生成id,然后尝试检索创建的id。 WithBodyFile