问个fastjson解析泛型的问题

小伙真帅 2017-05-03 11:28:21
接口中经常会用到部分统一的格式,比如把响应结果做成统一的格式,然后业务数据根据具体的业务具体返回

那在处理接口数据的时候,会统一做一个封装.


public class HttpResponse<T>
{
private int code;
private String message;
private T data;

// get set 略
}


接口请求的部分,我也做了一个封装


public class WebRequest
{
public <T> HttpResponse<T> Request(String method, String params,Class<T> clazz)
{
String responseContent = ""; // get data via http

HttpResponse<T> respEntity = JSON.parseObject(responseContent, new TypeReference<HttpResponse<T>>(){});

}
}


如果直接这么转换的话,编译是没有问题的,但由于JSON转换的时候,直接传入T类型,该类型可能被擦除了,导致无法得到正确的业务数据对象.

遇到这种情况应该如何处理?
...全文
349 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小伙真帅 2017-05-04
  • 打赏
  • 举报
回复
已解决

HttpResponse<T> respEntity = JSON.parseObject(responseContent, new TypeReference<HttpResponse<T>>(clazz){});
把泛型类的class传入即可.详情请查看源代码.
小伙真帅 2017-05-03
  • 打赏
  • 举报
回复
那你得写多少类啊. 每个请求写一个,不灵活, 肯定有解决办法,可能只是我目前还没想到而已.
解开者 2017-05-03
  • 打赏
  • 举报
回复
这应该没法解决,实际上会当Object处理。 jdk原生的反射,没法在运行时获得参数类型域擦除前的参数类型;不只是fastjson,很多json库都是用的原生反射,碰到这类情况,就会转成默认类型,而不是你代码中的参数类型。再取值的时候,会报转型异常。 目前想到的折中办法,data能接收几种类型的数据,就定义几个类,放弃使用泛型。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧