ClassCastException: RestTemplate restituisce l'elenco <LinkedHashMap> anziché Lista <MymodelClass>

Sto cercando di accedere ai methods getter sul mio MyModelClass, ma il mio codice sta tornando List<LinkedHashMap> invece di List<MyModelClass> . Questo è il mio codice.

 List<MyModelClass> myModelClass=(List<MyModelClass>) restTemplate.postForObject(url,mvm,List.class); System.out.println("Response= " + myModelClass); 

Ho provato a printingre la risposta e ho ricevuto la risposta JSON che mi aspetto. ma quando ho cercato di eseguire questo codice.

  • Come mantenere lo stato di spintore in android
  • Libreria Android Volley: Come submit un'image al server?
  • Qual è il modo migliore per creare disegni per diversi dpi
  • ottiene l'ID di visualizzazione da oncontextitemselected
  • Come posso aggiornare l'ActionBar quando le voci di menu switched OnPrepareOptionsMenu?
  • Come importre slidingmenu su Intellij Idea?
  •  System.out.println("Response= " + myModelClass.get(0).getMessage()); 

    Esso produrrà questo errore.

     java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.XXX.XXX.MyModelClass 

    È una mancata corrispondenza. Può qualcuno aiutarmi a sbarazzarsi di questo errore? Grazie.

    MyModelClass

     public class MyModelClass{ /** * */ @JsonProperty("id") public String id; @JsonProperty("type") public String type; @JsonProperty("user") public String user; @JsonProperty("message") public String message; //getters 

    Errore per

     MyModelClass[] myModelClass= restTemplate.postForObject(url,mvm, myModelClass[].class); 

    org.springframework.http.converter.HttpMessageNotReadableException: Imansible leggere JSON: Imansible deserializzare l'istanza di java.util.ArrayList dal token START_OBJECT

    Struttura di risposta JSON

      [{"key1":"value1","key2":"value2","parameters":{"key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"}}, {"key12":"value12","key22":"value22","parameters":{"key12":"value12","key22":"value22","key32":"value32","key42":"value42","key52":"value52"}}] 

    Se ci sono suggerimenti su come mappare questo tipo di risposta JSON in RestTemplate, aiuterà molto. Grazie

  • Android Eclipse Errore durante l'esecuzione di aapt: codice di return 139
  • Android: Come sovrapporre un bitmap / tracciare una bitmap?
  • Aggiungere una tabella pre-popolata al database senza perdere i dati esistenti
  • Come impostare il valore predefinito Spinner a null?
  • Come rendere EditText non modificabile tramite XML in Android?
  • CordovaWebView: ERRORE DI TEMPO
  • One Solution collect form web for “ClassCastException: RestTemplate restituisce l'elenco <LinkedHashMap> anziché Lista <MymodelClass>”

    Con la seguente chiamata di metodo

     List<MyModelClass> myModelClass=(List<MyModelClass>) restTemplate.postForObject(url,mvm,List.class); 

    Tutti Jackson sa è che si desidera un List , ma non ha alcuna restrizione sul tipo. Per impostazione predefinita, Jackson deserializza un object JSON in un LinkedHashMap , per cui stai ricevendo il ClassCastException .

    Se il JSON restituito è un arrays, un modo per get è utilizzare un arrays

     MyModelClass[] myModelClasses = restTemplate.postForObject(url,mvm, MyModelClass[].class); 

    È sempre ansible aggiungere gli elementi da quella matrix a un List .

    Non riesco a ricordare da quale versione, ma ora RestTemplate#exchange ha un sovraccarico che accetta un argomento ParameterizedTypeReference . ParameterizedTypeReference è il tipo di token hack per suggerire un tipo parametrizzato come destinazione per la deserializzazione.

    È ansible rifatturare il codice precedente per utilizzare lo exchange invece di postForObject e utilizzare ParameterizedTypeReference per get un List<MyModelClass> . Per esempio

     ParameterizedTypeReference<List<MyModelClass>> typeRef = new ParameterizedTypeReference<List<MyModelClass>>() { }; ResponseEntity<List<MyModelClass>> responseEntity = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(mvm), typeRef); List<MyModelClass> myModelClasses = responseEntity.getBody(); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.