我不能从Json返回List <bean>? Java.lang.ClassCastException </豆>

时间:2014-02-06 16:55:53

标签: java json spring

我的metod中有json。我希望json更改为object bean。编译器警告并要求删除泛型。

此示例不起作用:

Gson gson = new Gson();
    List<MyBean> myBean = gson.fromJson(
            result.getBody(), List<myBean>.class);

所以运行,但我无法访问bean:

Gson gson = new Gson();
    List<MyBean> myBean = gson.fromJson(
            result.getBody(), List.class);
MyBean.get(0).getFirstName(); 

错误java.lang.ClassCastException:com.google.gson.internal.StringMap无法强制转换为com.home.bean.MyBean

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

试试这个:

   Type myBeanListType = new TypeToken<ArrayList<MyBean>>() {}.getType();
   List<MyBean> mappedList = new Gson().fromJson(result.getBody(), myBeanListType );

答案 1 :(得分:1)

您的代码必须更改为:

List<MyBean> myBean = gson.fromJson(result.getBody(), new TypeToken<List<MyBean>>() {}.getType());

根据Gson用户指南here,(在 序列化和反序列化通用类型 部分下):

  

当你调用toJson(obj)时,Gson调用obj.getClass()来获取   有关要序列化的字段的信息。同样,你通常也可以   在fromJson(json,MyClass.class)方法中传递MyClass.class对象。   如果对象是非泛型类型,则此方法正常。但是,如果   对象是泛型类型,然后通用类型信息丢失   因为Java Type Erasure。

     

您可以通过指定正确的参数化来解决此问题   您的通用类型的类型。您可以使用TypeToken执行此操作   类。

因此,在处理泛型时,您必须使用TypeToken