美文网首页
java筑基-json反序列化

java筑基-json反序列化

作者: 卫泽洪_70a7 | 来源:发表于2021-12-26 15:27 被阅读0次

问题描述:

前后台交互式,接口返回json字符串:

{"data":{"result":"数据"},"code":1,"message":"success"}

其中,data的value会有各种不同的属性(java对象),前端要json转为对应的java对象。

解决:

定义一个接收返回数据的类Response.java,与后台统一:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Response<T> {
    private T data;
    private int code;
    private String message; 
}

定义一个具体的数据类Data.java,模拟数据

@lombok.Data
@AllArgsConstructor
public class Data {
    private String result;
}

定义入口类和方法DemoMain.java,模拟返回数据

public class DemoMain {
    public static void main(String[] args) {
        Data data = new Data("数据");
        Response<Data> dataResponse = new Response<>(data,1,"success");
        Gson gson = new Gson();
        String json = gson.toJson(dataResponse);
        System.out.println(json);
    }
}

运行程序,输出:

{"data":{"result":"数据"},"code":1,"message":"success"}

现在的需求是:将上述字符串转为Response<Data> 对象,定义TypeReference.java

@Data
public class TypeReference<T> {
    Type type;

    public TypeReference(){
        //获得泛型类型
        Class<? extends TypeReference> clazz = getClass();
        Type genericSuperclass = clazz.getGenericSuperclass();
        ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
        //因为类泛型可以定义多个A<T,E,U>所以是个数组
        Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
        type = actualTypeArguments[0];
    }
}

main方法增加代码

TypeReference<Response<Data>> typeReference = new TypeReference<Response<Data>>() {
        };
        Type type = typeReference.getType();
        Response<Data> response = gson.fromJson(json, type);
        System.out.println(response);

运行,输出:

Response(data=Data(result=数据), code=1, message=success)

完成!!!

相关文章

网友评论

      本文标题:java筑基-json反序列化

      本文链接:https://www.haomeiwen.com/subject/iaesqrtx.html