线程“主”中的异常java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap无法强制转换

时间:2019-11-20 07:49:22

标签: java spring-boot retrofit2

我正在尝试使用retrofit2来使用rest服务,当我的pojo没有泛型类型时,它可以正常工作。当我不使用泛型时,一切正常。这是我的改造服务。如This Link中的图片所示,在遍历数组列表时发生了错误。

   public interface EposService 
{
    @POST("v1/api/product/load_product")
    public Call<RestResponseObject> getProducts(@Body ProductParam udata);    

}
public class RestResponseObject<T> {
       public String message;
        private Object payload;
        private boolean responseStatus,status;
        List<T> data;//getter setter
}
public class ProductBean  {

     private String make, manufacture_year, name;//getter setter

}
private static RestResponseObject<ProductBean> findProducts(ProductParam pay) {
         RestResponseObject mv=new RestResponseObject();
          EposService service = retrofit.create(EposService.class);

        final Call<RestResponseObject> call = service.getProducts(pay);

        try {
            Response<RestResponseObject> resp = call.execute();
           if(resp!=null)
                {
            if (resp.code() == 200) {


                       mv=resp.body();

            } 
            else{

               // mv.setStatus(false);//("05");
                //mv.setMessage("connection error");
            }
        }

        } catch (Exception e) {

          e.printStackTrace();

        }

        return mv;
    }

这是完整的堆栈跟踪。

Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to api.bean.ProductBean
    at retrofit.Exec.main(Exec.java:63)

1 个答案:

答案 0 :(得分:1)

您的JSON转换器将接收到的对象转换为LinkedTreeMap,您将需要以某种方式将其转换为ProductBean以便对其进行访问

注释掉您拥有的for循环,并在其下面粘贴以下代码,看看会发生什么:

for(Object b: ps)
{
    ProductBean bean = new Gson().fromJson(new Gson().toJson(((LinkedTreeMap<String, Object>) b)), ProductBean.class);
    System.out.println(bean.getName());
}

(基于this答案)