我正在尝试使入站端点使用REST API,如果我不添加过滤器参数,但是当我这样做时,它可以工作。
<http:request-config name="HTTP_Request_Configuration" host="mywebsite.org/api/countries?display=[name,id]&filter[name]=#[message.inboundProperties.'http.query.string']" port="433" doc:name="HTTP Request Configuration" >
<http:basic-authentication username="user" password="123"/>
</http:request-config>
<flow name="CountryByValue">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8080" path=countryByValue" doc:name="HTTP"/>
<logger level="INFO" message="#[message.payloadAs(java.lang.String)]" doc:name="Logger"/>
<logger level="INFO" message="#[message.inboundProperties.'http.query.string']" doc:name="Logger"/>
<logger level="INFO" doc:name="Logger"/>
<http:request config-ref="HTTP_Request_Configuration" path="/" method="GET" doc:name="REST API">
</http:request>
<logger level="INFO" message="#[message.payloadAs(java.lang.String)]" doc:name="Logger"/>
<logger level="INFO" doc:name="Logger"/>
</flow>
在我的记录器中,我可以看到查询字符串确实存在
INFO 2015-04-21 11:21:25,389 [[panierv2].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: /getCountryByValue?Canada
INFO 2015-04-21 11:21:25,411 [[panierv2].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Canada
但最终它并没有给我正确的答案:
<api xmlns:xlink="http://www.w3.org/1999/xlink">
<countries>
</countries>
</api>
如果我直接在浏览器中使用链接工作:
mywebsite.org/api/countries?display= [名称,ID]安培;过滤[名称] =加拿大
我明白了:
<api xmlns:xlink="http://www.w3.org/1999/xlink">
<countries>
<country>
<id>
<![CDATA[ 4 ]]>
</id>
<name>
<language id="2" xlink:href="sdfg">
<![CDATA[ Canada ]]>
</language>
<language id="3" xlink:href="sdfg">
<![CDATA[ Canada ]]>
</language>
</name>
</country>
</countries>
</api>
问题似乎出现在&amp;在主持人。但我似乎无法使其发挥作用。
谢谢。
答案 0 :(得分:1)
您应该在request元素中添加这些查询参数,而不是request-config。
看起来应该是这样的:
<http:request-config name="HTTP_Request_Configuration" host="mywebsite.org" basePath="api" port="443" protocol="HTTPS" doc:name="HTTP Request Configuration" >
<http:basic-authentication username="user" password="123"/>
</http:request-config>
...
<http:request config-ref="HTTP_Request_Configuration" path="/countries" method="GET" doc:name="REST API">
<http:request-builder>
<http:query-param paramName="display" value="[name,id]" />
<http:query-param paramName="filter[name]" value="#[message.inboundProperties.'http.query.string']" />
</http:request-builder>
</http:request>
我在api处建立了主机端,然后将其余部分设置为请求中的路径,因为这样会更容易重用。
希望有所帮助。