一般来说,当使用POST方法传递JSON数据到HTTP组件后,此时如果放置一个Logger组件,会发现经过HTTP组件后,payload的类型实际是org.glassfish.grizzly.utils.BufferInputStream
,因为经过HTTP后将负载变为了流的形式了。
如果需要还原为JSON格式字符串,方法有两个:
(1)在HTTP组件后,使用Object to String
组件将payload转为String,最简单的方法。
(2)使用MEL表达式#[message.payloadAs(java.lang.String)]
(3)java中可以继承AbstractMessageTransformer
,然后通过MuleMessage
类的getPayloadAsString()
方法。
如果你需要在java组件里面解析JSON字符串,那么可以使用org.json.simple
里面的类来解析,这个jar包Mule里面已经引入,因此可以直接使用,代码如下:
/**
* 将JSON字符串转为org.json.simple.JSONObject
* @param jsonStr JSON字符串
* @return JOSNObject对象
* @throws ParseException
*/
public JSONObject convertSting2JSONObject(String jsonStr) throws ParseException {
JSONParser parser = new JSONParser();
JSONObject object = (JSONObject) parser.parse(jsonStr);
return object;
}
但是上面的代码只支持JSON对象,如果JSON字符串是数组,则会出现类型转换错误
参考资料
Anirban Sen Chowdhary的回答
官网HTTP组件说明
org.json.simple.JSONObject创建方法