Mule HTTP请求响应代码400,URL中包含@符号

时间:2017-01-24 23:40:17

标签: http request mule http-status-code-400

**回收问题**

我正在使用Mule 3.8中的HTTP:Request组件 -

<http:request config-ref="httpRequestConfig" host="hostname" port="8081" path="validate/john.doe@gmail.com" method="GET" doc:name="HTTP Request" />

HTTP请求配置如下所示 -

<http:request-config name="httpRequestConfig" basePath="user" doc:name="HTTP Request Configuration" />

这导致响应代码为400 -

Root Exception stack trace:
org.mule.module.http.internal.request.ResponseValidatorException: Response code 400 mapped as failure.
    at org.mule.module.http.internal.request.SuccessStatusCodeValidator.validate(SuccessStatusCodeValidator.java:37)
    at org.mule.module.http.internal.request.DefaultHttpRequester.validateResponse(DefaultHttpRequester.java:356)
    at org.mule.module.http.internal.request.DefaultHttpRequester.innerProcess(DefaultHttpRequester.java:344)
    at org.mule.module.http.internal.request.DefaultHttpRequester.processBlocking(DefaultHttpRequester.java:217)

如果我从Chrome访问网址(http://hostname:8081/user/validate/john.doe@gmail.com),则可以正常使用。

我知道导致问题的是@符号。对于没有@符号的值,Mule流程可以正常工作。

请求中我可能缺少什么?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

必须为特殊字符编码URL。对于您的情况,将@字符替换为%{40},如此http://hostname:8081/user/validate/john.doe%40gmail.com

它对我有用,这是我的代码。

<http:listener-config port="8081" name="config" host="0.0.0.0" />

<flow name="test">
    <http:listener path="/Test/{emailAddress}" config-ref="config" />
    <logger level="INFO" message="#[message.inboundProperties.'http.uri.params'.emailAddress]"/>
</flow>

要测试的网址 - http://localhost:8081/Test/senthil.test%40gmail.com