美文网首页
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