代码之家  ›  专栏  ›  技术社区  ›  Kiran

无法反序列化PaymentResponse[]的实例,因为它超出了START\u对象标记

  •  0
  • Kiran  · 技术社区  · 8 年前

    ObjectMapper objectMapper = new ObjectMapper();
    PaymentResponse[] paymentResponse  = objectMapper.readValue(serverResponseStr, PaymentResponse[].class);
    
    {
        "PaymentResponse[]": [
            {
                "uid": "111",
                "name": "kiran"
            },
            {
                "uid": "112",
                "name": "kumar"
            }
        ]
    }
    
    Can not deserialize instance of PaymentResponse[] out of START_OBJECT token
    
    com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of PaymentResponse[] out of START_OBJECT token
     at [Source: {"PaymentResponse[]": [{"uid": "111","name": "kiran"},{"uid": "112","name": "kumar"}]}
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   delephin    8 年前

    理想的情况是,您可以将响应更改为:

    [{
            "uid": "111",
            "name": "kiran"
        }, {
            "uid": "112",
            "name": "kumar"
        }
    ]
    

    如果无法更改,请尝试以下操作:

    ObjectMapper objectMapper = new ObjectMapper();
    TypeFactory typeFactory = objectMapper.getTypeFactory();
    JsonNode array = objectMapper.readValue(anotherResponseStr, JsonNode.class);
    JsonNode paymentResponse = array.get("PaymentResponse[]");
    
    List<PaymentResponse> p = objectMapper.readValue(paymentResponse.toString(), 
    typeFactory.constructCollectionType(List.class, PaymentResponse.class));