Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


ClassCastException: RestTemplate devuelve Lista <LinkedHashMap> en lugar de List <MymodelClass>

Estoy intentando tener acceso a los métodos del getter en mi MyModelClass pero mi código está devolviendo la List<LinkedHashMap> vez de la List<MyModelClass> . Este es mi código.

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

Intenté imprimir la respuesta y conseguí la respuesta de JSON que estoy esperando. Pero cuando traté de ejecutar este código.

  • Cómo cambiar el color de fondo de ActionMode en Android
  • Android listview lazy loading
  • RelativeLayout zorder lollipop
  • Captura de pantalla en negro
  • Mms descarga mms contenido a través de mms url
  • El paquete no tiene correspondencia uid: 10124 en el disco, 10134 en la configuración
  •  System.out.println("Response= " + myModelClass.get(0).getMessage()); 

    Producirá este error.

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

    Es un desajuste. ¿Puede alguien ayudarme a deshacerse de este error? Gracias.

    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 

    Error para

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

    Org.springframework.http.converter.HttpMessageNotReadableException: No se pudo leer JSON: No se puede deserializar la instancia de java.util.ArrayList de START_OBJECT token

    Estructura de respuesta de 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"}}] 

    Si hay alguna sugerencia sobre cómo mapear este tipo de respuesta JSON en RestTemplate, ayudaría mucho. Gracias

  • Obtención del tamaño de la ventana SIN título / barras de notificación
  • Inicio de sesión de Android - autenticador de cuentas vs autenticación manual
  • Determine el ángulo de visión de la cámara del teléfono inteligente
  • Error extraño del ciclo de vida del fragmento
  • ¿Cómo puedo bloquear el emulador de Android?
  • ¿Cómo iniciar el servicio con Alarm Manager en Android?
  • One Solution collect form web for “ClassCastException: RestTemplate devuelve Lista <LinkedHashMap> en lugar de List <MymodelClass>”

    Con la siguiente llamada al método

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

    Todo lo que Jackson sabe es que quieres una List , pero no tiene ninguna restricción en el tipo. De forma predeterminada, Jackson deserializa un objeto JSON en un LinkedHashMap , por lo que obtendrá ClassCastException .

    Si su JSON devuelto es una matriz, una forma de obtenerlo es usar una matriz

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

    Siempre puede agregar los elementos de esa matriz a una List .

    No puedo recordar desde qué versión, pero RestTemplate#exchange ahora tiene una sobrecarga que acepta un argumento ParameterizedTypeReference . El ParameterizedTypeReference es el tipo token hack para sugerir un tipo parametrizado como el objetivo para la deserialización.

    Puede refactorizar el código anterior para utilizar exchange lugar de postForObject y utilizar ParameterizedTypeReference para obtener una List<MyModelClass> . Por ejemplo

     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(); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.