ClassCastException异常:RestTemplate返回列表< LinkedHashMap的>而不是List< MymodelClass> [英] ClassCastException: RestTemplate returning List<LinkedHashMap> instead of List<MymodelClass>

查看:2634
本文介绍了ClassCastException异常:RestTemplate返回列表< LinkedHashMap的>而不是List< MymodelClass>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图访​​问getter方法​​对我MyModelClass但我的code将返回名单,其中,LinkedHashMap的> 而不是名单,其中,MyModelClass&GT ; 。这是我的code。

I'm trying to access getter methods on my MyModelClass but my code is returning List<LinkedHashMap> instead of List<MyModelClass>. This is my code.

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

System.out.println("Response= " +  myModelClass);

我试图打印的反应和我得到的JSON响应,我很期待。 但是当我试图运行此code。

I tried to print the response and I got the JSON Response that I'm expecting. but when I tried to run this code.

System.out.println("Response= " +  myModelClass.get(0).getMessage());

这会产生这种错误。

It will produce this error.

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

有一个错配。有人可以帮助我摆脱这个错误?谢谢。

It is a mismatch. Can someone help me to get rid with this error? thanks.

MyModelClass

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

有关错误

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

org.springframework.http.converter.HttpMessageNotReadableException:无法读取JSON:无法反序列化的java.util.ArrayList实例出来START_OBJECT令牌

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token

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"}}]

如果没有对如何映射这种JSON响应中RestTemplate的任何建议,这将有很大的帮助。谢谢

If there is any suggestion on how to map this kind of JSON Response in RestTemplate,It would help a lot. thanks

推荐答案

通过下面的方法调用

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

所有杰克逊知道的是,你想有一个列表,但不会对类型任何限制。默认情况下杰克逊反序列化的JSON对象转换为的LinkedHashMap ,所以这就是为什么你所得到的 ClassCastException异常

All Jackson knows is that you want a List, but doesn't have any restriction on the type. By default Jackson deserializes a JSON object into a LinkedHashMap, so that's why you are getting the ClassCastException.

如果您返回的JSON是得到一个数组,其中一种方法就是使用数组

If your returned JSON is an array, one way to get it is to use an array

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

您可以随时从阵列中添加的元素到列表

You can always add the elements from that array to a List.

这篇关于ClassCastException异常:RestTemplate返回列表&LT; LinkedHashMap的&GT;而不是List&LT; MymodelClass&GT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆