Gson 的TypeAdapter缺失引起的坑

Forgot to register a type adapter?

翻译结果是忘记注册类型的适配器

原因在序列化成gson的时候里面没有这个适配器

Gson中的属性

final List<TypeAdapterFactory> factories;

final List<TypeAdapterFactory> builderFactories;
final List<TypeAdapterFactory> builderHierarchyFactories;

 TypeAdapter会在registerTypeAdapter 包装成TypeAdapterFactory

GsonBuilder里面的方法
registerTypeAdapter(){
    ....
    factories.add(TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter)typeAdapter));
    ....
}

然后会根据你的Class类类型找到对应的适配器去序列化你的类型

但是我遇到的是是“java.lang.Class<?>”这个带泛型的类,

根据目前的知识暂时找到不这个类class的编写,只能从手写获取这个类了

cm1 = C
package cn.iocoder.springboot.lab34.actuatordemo;

import java.lang.reflect.Field;
import java.lang.reflect.Type;

public class Test {

    private Class<?> type;
 
    public Test() {
    }

    public static void main(String[] args) {
        Class<?>cm1= null; 
        try { 
            cm1 = Class.forName("cn.iocoder.springboot.lab34.actuatordemo.Test");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } 
        Field[] declaredFields1 = cm1.getDeclaredFields(); 
        Type genericType1 = declaredFields1[0].getGenericType();
        
    }
}
这个Type就是registerTypeAdapter()第一个参数的Type

然后再写一下注册的适配器,就可以解决这个问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值