fastjson 使用TypeReference用作泛型json字符串解析时,多层泛型解析失败

vnjpjtjt  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(57)

import lombok.Data;

@Data
public class ResponseResult<T> {
    /**
     * 处理结果
     */
    private boolean success;

    /**
     * 未知
     */
    private String requestid;

    /**
     * 发生异常事的错误码
     */
    private String code;
    /**
     * 未说明
     */
    private String msg;
    /**
     * 未说明
     */
    private String detail;

    /**
     * 返回的数据
     */
    private T data;

}
import java.util.List;

@Data
public class DataInfo<T> {

    /**
     * 未说明
     */
    private boolean dataSuccess;

    /**
     * 未说明
     */
    private String method;

    /**
     * 未说明
     */
    private  int  returnstatus;

    private List<T> message;

}
import java.io.Serializable;

@Data
public class DataMessage implements Serializable {

    private String apimaterNo;

    private String corpcode;

    private String ismatch;

    private String itemno;

    private String remark;

    private String requestno;
}

测试用例:

@Test
    public void testCase1(){
        String msg1="{\"success\":true,\"requestid\":\"0af8f5df\",\"code\":null,\"msg\":null,\"detail\":null,\"data\":{\"dataSuccess\":true,\"message\":[{\"apimaterNo\":\"hw-001\",\"corpcode\":\"44199880\",\"ismatch\":\"1\",\"itemno\":\"129004525\",\"remark\":\"对照\",\"requestno\":\"201912121336445344\"}],\"method\":\"addPurchaseApply\",\"returnstatus\":0}}";
        // 写法一
        TypeReference<ResponseResult<DataInfo<DataMessage>>> typeReference =
                new TypeReference<ResponseResult<DataInfo<DataMessage>>>(ResponseResult.class, DataInfo.class, List.class, DataMessage.class){};
//        ResponseResult responseResult = JSON.parseObject(msg1, new TypeReference<ResponseResult<DataInfo<DataMessage>>>(){});
        ResponseResult responseResult = JSON.parseObject(msg1, typeReference);

        // 写法二
//        ResponseResult responseResult = JSON.parseObject(msg1,new TypeReference<ResponseResult<DataInfo>>(){});
        System.out.println(JSON.toJSONString(responseResult.getData()));
    }

运行结果:

方法一 异常
使用写法二能够正常转换,但是无法完成类型转换
严重程度:很严重
泛型转换:fastjson 版本 1.x.x 正常
fastjson 版本 2.0.1 上述转换报错

TEST
测试泛型转换,额外发现其中 2.0.(2|3)版本 中提供的api 不向下兼容?
method:public static String toJSONString(Object object, boolean prettyFormat){ ...}

相关问题