Fastjson,Gson踩坑记

前言

这里纯属吐槽下,最近移动办公加班比平时上班还猛,凌晨1点的讨论技术,处理开发bug,太难了。

步入正题,昨天遇到一个bug,就是数据库是json类型的,然后我一如既往的负责开发公共解析接口,供大家使用,为人民服务。

问题前因后果

我使用Fastjson来进行序列化对象,然后set到redis,还有反序列化嘛。

Fastjson 坑 first

JSON.toJsonString(xx)

我发现转完之后再次去解析一直报错。后面发现是时间序列化有问题,就是2020-02-23 10:11:00 ,转完之后一直变成时间戳了。自然反序列化回对象Date类型就gg。

处理方案

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;

Gson 坑 number 1

有些字段传空的过来,恰好那个字段是Integer或者Long类型那就扑街了~

这时它是String转Integer或者Long,当然框架没有像人那么灵活自动转换

处理方案

public class IntegerTypeAdapter extends TypeAdapter<Integer> {
    @Override
    public Integer read(JsonReader reader) throws IOException {
        if(reader.peek() == JsonToken.NULL){
            reader.nextNull();
            return null;
        }
        String stringValue = reader.nextString();
        try{
            return Integer.valueOf(stringValue);
        }catch(NumberFormatException e){
            return null;
        }
    }
    @Override
    public void write(JsonWriter writer, Integer value) throws IOException {
        if (value == null) {
            writer.nullValue();
            return;
        }
        writer.value(value);
    }
}

Long的设配器也是改下类型就obk了。

其次是配置Gson咯。

Gson gson = new GsonBuilder()
            .registerTypeAdapter(Long.class, new LongTypeAdapter())
            .registerTypeAdapter(Integer.class, new IntegerTypeAdapter())
            .create();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值