【问题标题】:Mule can't convert json response to objectMule 无法将 json 响应转换为对象
【发布时间】:2019-02-12 19:43:30
【问题描述】:

我无法通过 Mule(3.8 CE 运行时)中的 JSON-to-Object 组件将来自 REST WS 的 JSON 响应转换为对象。组件 java.util.HashMap 中的返回类(我也尝试过 ArrayList) JSON 响应

[{
        "userId": 123456,
        "otherId": 654321
    }, {
        "userId": 123457,
        "otherId": 654321
    }, {
        "userId": 123458,
        "otherId": 654321
    }
]

我收到错误

ERROR 2019-02-12 11:37:32,386 [[demorestmapper].HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : Failed to transform from "json" to "java.util.HashMap"
Payload               : org.glassfish.grizzly.utils.BufferInputStream@77054f71
Transformer           : JsonToObject{this=2c88a3e8, name='JsonToHashMap', ignoreBadInput=false, returnClass=SimpleDataType{type=java.util.HashMap, mimeType='application/json', encoding='null'}, sourceTypes=[SimpleDataType{type=java.io.Reader, mimeType='*/*', encoding='null'}, SimpleDataType{type=java.net.URL, mimeType='*/*', encoding='null'}, SimpleDataType{type=java.io.File, mimeType='*/*', encoding='null'}, SimpleDataType{type=java.lang.String, mimeType='*/*', encoding='null'}, SimpleDataType{type=java.io.InputStream, mimeType='*/*', encoding='null'}, SimpleDataType{type=[B, mimeType='*/*', encoding='null'}]}
Element               : /demorestmapperFlow/processors/3 @ demorestmapper:demorestmapper.xml:18 (JSON to Object)
Element XML           : <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"></json:json-to-object-transformer>
--------------------------------------------------------------------------------
Root Exception stack trace:
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.HashMap out of START_ARRAY token
 at [Source: java.io.InputStreamReader@563690a7; line: 1, column: 1] 

【问题讨论】:

    标签: json rest mule


    【解决方案1】:

    因为它是一个 JSON 数组。所以您需要在转换器中指定将其转换为地图/对象数组:

    对于数组:

     <json:json-to-object-transformer returnClass="java.util.HashMap[]" />`
    

    vs 地图:

    <json:json-to-object-transformer returnClass="java.util.HashMap" />`
    

    【讨论】:

    • 它工作正常。可以告诉我如何从这个 Json 中只获取“userId”。我已经有了 hashmap,我只想在每个组件中使用“userId”作为集合
    • 在 Mel 中 for each 你可以使用 #[payload.userid]
    • 终于,我明白了。在每个组件的“集合”属性中,我使用#[payload]。在循环内部我使用#[payload.userId]
    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 2018-07-26
    • 1970-01-01
    • 2016-02-21
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多