Java 改造Mule HttpRequest&x27;获取';回应

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

我正在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-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,它就可以工作了。