Java 改造Mule HttpRequest&x27;获取';回应
我正在Mule中对自己的RESTAPI进行httpRequest GET调用,我希望能够将结果转换为JSONArray。我调用的服务配置为返回JSON,但在mule中处理负载时,它被视为BufferInputString 代码如下:Java 改造Mule HttpRequest&x27;获取';回应,java,json,http,mule,esb,Java,Json,Http,Mule,Esb,我正在Mule中对自己的RESTAPI进行httpRequest GET调用,我希望能够将结果转换为JSONArray。我调用的服务配置为返回JSON,但在mule中处理负载时,它被视为BufferInputString 代码如下: <http:request config-ref="HTTP_Request_Configuration" path="muletest" method="GET" metadata:id="ccb5da53-5418-9753-8399-bb6f8a792f
<http:request config-ref="HTTP_Request_Configuration" path="muletest" method="GET" metadata:id="ccb5da53-5418-9753-8399-bb6f8a792f0a" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="firstname" value="#[payload.firstname]"/>
<http:query-param paramName="lastname" value="#[payload.lastname]"/>
</http:request-builder>
</http:request>
<set-variable variableName="existingAppointment" value="#[payload]" encoding="UTF-8" mimeType="text/json" metadata:id="40cc3baf-834e-4a82-86db-2779fb736565" doc:name="Get Result"/>
<logger message="GET RESULT: #[payload.get(0)]" level="INFO" metadata:id="5b634d23-af82-4160-8351-4360aa3b3edf" doc:name="Log Get Result" />
这显然意味着它正在尝试处理BufferInputStream类型的对象,但我不明白如何将该类型转换为JSON类型 我肯定我做错了什么(我是骡子的新手),但我不知道是什么 ****编辑以显示我的解决方案**** 您好,您可以在http请求之后使用Dataweave(转换消息)
%dw 1.0
%output application/json
---
payload[0]
注意:您可以将输出替换为
%output application/java
生成的有效负载将是LinkedHashMap的一个实例,您可以在http请求之后使用Dataweave(转换消息)
%dw 1.0
%output application/json
---
payload[0]
注意:您可以将输出替换为
%output application/java
生成的有效负载将是LinkedHashMap的一个实例,您必须将HttpResponse从JSON转换为Map,以便可以在mule表达式中访问它:
<json:json-to-object-transformer returnClass="java.util.HashMap" />
<logger message="GET RESULT: #[payload.get(0)]" level="INFO" doc:name="Log Get Result" />
您必须将HttpResponse从JSON转换为Map,以便可以在mule表达式中访问它:
<json:json-to-object-transformer returnClass="java.util.HashMap" />
<logger message="GET RESULT: #[payload.get(0)]" level="INFO" doc:name="Log Get Result" />
即使对象类型是BufferInputStream,如果您将
#[payload]
放入记录器(或在调试时计算Mule表达式,Ctrl+Shift+I),您将获得字符串形式的JSON
为了进一步评估,将#[json::
放入记录器中,您还将获得json。e、 g:
{
"flights": [
{
"code": "ER38sd",
"origin": "MUA",
"destination": "SFO"
},
{
"code": "ER39rk",
"origin": "MUA",
"destination": "SFO"
}
]
}
然后将表达式修改为
#[json:flights]
,您将获得一个ArrayList(字符串形式的json数组),即使对象类型是BufferInputStream,如果您将#[payload]
放入记录器中(或者在调试时计算Mule表达式,Ctrl+Shift+I),您将获得字符串形式的json
为了进一步评估,将#[json::
放入记录器中,您还将获得json。e、 g:
{
"flights": [
{
"code": "ER38sd",
"origin": "MUA",
"destination": "SFO"
},
{
"code": "ER39rk",
"origin": "MUA",
"destination": "SFO"
}
]
}
然后将表达式修改为
#[json:flights]
,您将获得一个ArrayList(字符串形式的json数组)使用“Object to json”转换器。这应该行得通。使用“Object to JSON”转换器。这应该行。我认为应该使用json:json-to-object-transformer
来代替。对不起,这就是我的意思-传入的负载是json,所以它应该是json-to-object-transformer。谢谢@sulthonyhI,我认为它应该使用json:json-to-object-transformer
。对不起,这就是我的意思-传入的负载是json,所以它应该是json-to-object-transformer。感谢@sulthonyhI接受了这个答案,因为它引导我找到了解决方案。我使用dtawave转换器将JSONArray转换为Map,并将输出设置为application/java,结果成功了。我接受了这个答案,因为它引导我找到了解决方案。我使用dtawave转换器将JSONArray转换为Map,并将输出设置为application/java,它就可以工作了。