我正在尝试使用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)
答案 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答案)